# Welcome to Pulse Insights

## Overview

### What is Pulse Insights?

Pulse Insights is an customer data collection and activation platform. You can contextually collect feedback, preferences, and opinions directly from your users as they interact with your brand in different channels, without interrupting their core experience. And then use that high velocity data to drive better business decisions, to personalize future experiences (content, functionality), and show relevant content and links in response to what they told you.

## Get Started

We've put together some helpful guides for you to get setup with our product quickly and easily.

{% content-ref url="/pages/XTHzgrpcLmBT8PMDMHIU" %}
[Implementing on Web and Mobile Web](/implementing-pulse-insights-dev/implementing-on-web-and-mobile-web)
{% endcontent-ref %}

{% content-ref url="/pages/I8uMl1TptYTWPLQRci98" %}
[Implementing in email](/implementing-pulse-insights-dev/implementing-in-email)
{% endcontent-ref %}

## Key Platform Changes

#### 2025-Q4

* [AI Readouts](/configuring-pulse-insights-console/ai-agents/readout)
* Pulse Strategy Architect
* Survey Import
* Survey & Account Name Editing

#### 2025-Q3

* Survey Overview Documents
* Next Best Action for All-at-Once Surveys
* Adaptive MFA

#### 2025-Q2

* Survey Overview Document
* [Next Insights AI Agent](/configuring-pulse-insights-console/ai-agents/next-insights)
* [Survey Brief & Hypothesis Generator AI Agent](/configuring-pulse-insights-console/ai-agents/survey-brief-and-hypothesis-generator)
* Smart Analyzer in Report Explorer&#x20;

#### 2025-Q1

* Support for [Multifactor Authentication](/configuring-pulse-insights-console/account-setup/authentication-and-sso)
* PDF template management
* Viewed Impression Frequency Cap
* SDK updates for [iOS](https://github.com/Pulse-Insights/pi-ios-spm/releases) and [Android](https://github.com/Pulse-Insights/pi.android/releases)&#x20;

#### 2024-Q4

* Report Explorer feature: Create and share custom reports
* Reporting-only users can now view survey flow

#### 2024-Q3

* API endpoint to generate PDF of survey results
* Faster & better Free Text Auto-tagging
* "Live since", "Last impression", "Last submission" metrics on survey dashboard

#### 2024-Q2

* Faster Results page loading
* Viewed impression metric for more accurate impression counting

#### 2024-Q1

* Custom Content Link Click Reporting
* On click callback
* AI Suggested tags for Free Text response tagging
* Enhanced Auto-tagging for Free Text responses

#### 2023-Q4

* Get AI summaries of your free text responses to quickly understand what your users are saying
* Accessibility enhancements for web
* Enhanced Free Text Viewer features including easier Tagging
* Access to BI Dashboards from Reporting Page


# Implementing on Web and Mobile Web

## Technical Implementation

### Intended Audience&#x20;

This section is targeted towards development teams tasked with implementing Pulse Insights  platform.&#x20;

<br>


# Deploying your tag (code snippet)

Pulse Insights is integrated into web-based environments with a JavaScript tag or code snippet that executes on page load.&#x20;

## Example Tag&#x20;

<pre class="language-javascript"><code class="lang-javascript"><strong>&#x3C;script>
</strong>(function() {
  var w = window, d = document;
  var s = d.createElement('script'); s.async = 1;
  s.src = '//js.pulseinsights.com/surveys.js';

  var f = d.getElementsByTagName('script')[0];
  f.parentNode.insertBefore(s, f);

  class PulseInsightsCommands extends Array{
    push(...commands) {
      commands.forEach((command) => window.PulseInsightsObject.processCommand(command));
    }
  }

  function waitPulseInsightsObject() {
    const timeoutPromise = new Promise((_, reject) => setTimeout(reject, 5000));
    const waitPromise = new Promise(function (resolve) {
      function wait() {
        if (typeof window.PulseInsightsObject == 'object') {
          resolve();
        } else {
          setTimeout(wait, 100);
        }
      }
      wait();
    });
    return Promise.race([timeoutPromise, waitPromise])
  }

  waitPulseInsightsObject().then(function () {
    w['pi']=function() {
      w['pi'].commands = w['pi'].commands || new PulseInsightsCommands;
      w['pi'].commands.push(arguments);
    };
    
    pi('host', 'survey.pulseinsights.com');
    pi('identify', 'PI-99999999); // This is an example value.
    pi('pushBeforeGet', true);
    pi('get', 'surveys');
  })
  .catch(function() {
    console.error('Failed to initialize window.PulseInsightsObject');
  });
})();
&#x3C;/script>
</code></pre>

## What the tag does&#x20;

* Identifies the browser, or creates a new Device UDID
* Fetches surveys to render, if any&#x20;
* Renders any survey with its appropriate [formatting](broken://pages/1zNkK0VekLgcZXYM7BjP)&#x20;
* Collects user responses, if the user answers&#x20;
* Executes [callbacks](/implementing-pulse-insights-dev/implementing-on-web-and-mobile-web/callbacks), if any, to integrate the data with other tag-based vendors

## Finding your specific tag&#x20;

You can find your tag in your Console account under **Settings > Get Code Snippet** or by using your Tag Integration Guide that your Client Success Manager emailed to you.

<div align="left"><figure><img src="/files/tdmzmFgqRmtuyBAhzXhF" alt="" width="563"><figcaption></figcaption></figure></div>

{% hint style="info" %}
On rare occasions, Pulse Insights will customize your tag to better support your particular environment. If you received a Tag Integration Guide from your Client Success Manager with a modified tag, use that.&#x20;
{% endhint %}

## Tag Deployment FAQs&#x20;

### Which pages should have the Pulse Insights code snippet?&#x20;

In general, we recommend placing your snippet across all pages of your site(s). This enables easy survey launches in new site areas and accurate visit and session pageview count targeting.

If you're only using Pulse Insights on a specific selection of pages, it is OK to solely deploy the tag to those pages.&#x20;

### Where on the page should we place the code snippet?&#x20;

We recommend placing your Pulse Insights Code Snippet just above the closing body tag in the page or configuring to fire after the page content has loaded.&#x20;

### Can we use a tag manager to deploy Pulse Insights?

Yes. Pulse Insights is compatible with tag managers. We recommend using the Custom HTML option in case your specific tag differs from the tag manager's built-in tag template.

However, it should not be placed inside of a Doubleclick Floodlight Tag, as Pulse Insights needs access to the parent page to render a survey and Floodlight tags create an invisible iframe and load tags inside of it.

### Does the Pulse Insights tag work with \[X] CMS?

Yes, the CMS you use doesn't impact the tag's functionality.

### Do we use the same code snippet across secure/non-secure pages?‍&#x20;

Yes. The code snippet works across both http and https pages. There are no special configuration settings to enable HTTPS calls to render properly.

### Do we use the same tag across multiple domains and subdomains?&#x20;

Yes, you use the same code snippet across all domains, subdomains and environments on which you’d like to serve surveys and collect user feedback that are covered by your license. For questions regarding what is covered by your license, please reach out to your Client Success Manager.&#x20;

### Do we use the same tag across our development, staging, and production environments?

Yes, you use the same code across environments. Learn about our [QA features](/implementing-pulse-insights-dev/implementing-on-web-and-mobile-web/qa-process-and-preview-mode).&#x20;


# Ingesting contextual data for targeting and analysis

## Use case for ingesting contextual data

Pulse Insights can ingest contextual data about the current user, page, behavior, or device that isn’t immediately apparent or visible from the page they are visiting.

{% hint style="success" %}
Contextual data is **optional** in most implementations, but is **highly recommended** because it can provide significant targeting flexibility, incremental insights, and enable appropriate follow-up with other systems.&#x20;
{% endhint %}

Contextual data is used for two primary purposes:

### **Targeting**

Use the value of the contextual data to determine whether the user is eligible to see a survey.

{% hint style="info" %}
Example:

You might pass Pulse Insights authentication status as contextual data so that you can target a survey to only actively authenticated users.
{% endhint %}

### **Analysis**

Learn how different values of the contextual data impact user responses. &#x20;

{% hint style="info" %}
Example:

You might pass Pulse Insights authentication status as contextual data so that you can learn if authenticated users answer differently than unauthenticated users.
{% endhint %}

## Common data types to consider passing to Pulse Insights

| Category                  | Examples                                                                                                                                                  | Comments                                                                                                                                                                                                                                                  |
| ------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| Identifiers               | <p>• Session ID<br>• User ID<br>• Analytics IDs<br>• Support Ticket ID</p>                                                                                | <p>Often used to tie data to other systems to dig deeper or drive resolution.<br>Note: Pulse Insights maintains a special field, <a href="/pages/pFY929Nl9LVGD2V71Lng">client key</a>, for a user identifier that persists for a user across devices.</p> |
| Authentication status     | <p>• Unrecognized</p><p>• Recognized<br>• Unauthenticated<br>• Authenticated</p>                                                                          |                                                                                                                                                                                                                                                           |
| User & enrollment details | <p>• IsCustomer<br>• Products owned<br>• IsMFAEnabled<br>• IsAutoPayEnrolled<br>• IsPaperlessEnrolled<br>• IsAlertsEnrolled<br>• IsNewsletterEnrolled</p> |                                                                                                                                                                                                                                                           |
| Customer Tenure           | • Join date                                                                                                                                               |                                                                                                                                                                                                                                                           |
| Model scores or output    | <p>• Likelihood to convert<br>• Likelihood to cancel </p><p>• Segmentation scores<br>• LLM prompt and output</p>                                          |                                                                                                                                                                                                                                                           |
| Ecommerce details         | <p>• Cart amount<br>• SKUs</p>                                                                                                                            |                                                                                                                                                                                                                                                           |
| Experience details        | • IsWebview                                                                                                                                               | Used if you'd like to target or view results of web users vs. app users \[with webview screens].                                                                                                                                                          |
| Segmentations             | <p>• High Value Customer<br>• Trade or business user</p>                                                                                                  |                                                                                                                                                                                                                                                           |
| Locale details            | • Market & Language                                                                                                                                       | Used to serve the appropriate survey or language in global surveys.                                                                                                                                                                                       |
| Search/Filter usage       | <p>• Search term<br>• Count of searches<br>• Currently selected filters<br>• Number of search results</p>                                                 | Used to uncover the drivers of search satisfaction.                                                                                                                                                                                                       |
| Categories or hierarchy   | <p>• Page category<br>• Site section<br>• Step number</p>                                                                                                 |                                                                                                                                                                                                                                                           |
| A/B Test Variation        | • Variation ID                                                                                                                                            |                                                                                                                                                                                                                                                           |
| Content details           | <p>• Author<br>• Tags or topic</p>                                                                                                                        |                                                                                                                                                                                                                                                           |

## The Two Types of Contextual Data

### **Context Data**

Describes the current page, survey, or person at the moment the survey is answered. The data may change from page to page and consequently these values don't persist from page to page.&#x20;

Examples of good fit for contextual data:

* Number of search results
* Current search term
* Current page hierarchy or category
* Current step in a process
* Current cart value
* A/B Test Variation ID
* Authentication Status

### **Device Data**

Describes the device/browser (often as a proxy for the person). It is expected to remain relatively stable over time because it describes properties of the person/device.

Examples of good fit data for device data:

* IsCustomer
* JoinDate

The primary use case for Device Data is that it persists over multiple pageviews and visits and only needs to be defined once. For example, once you define a user as a customer once, you can use that targeting in subsequent pageviews and sessions without needing to redefine it.&#x20;

{% hint style="warning" %}
Since device data is meant for data that changes infrequently, only the latest value is saved, not the value at the time the user responded. The latest device data values will apply to any and all responses from that user.
{% endhint %}

## Syntax & Examples

### Context Data – To Describe the Current Experience

```javascript
pi('set_context_data', object);
```

Example:

```javascript
pi('set_context_data', {author: 'Ann Smith', variant: 'a'});
```

{% hint style="info" %}
If using Context Data for targeting, it should be defined before

`pi('get', 'surveys');`

since that line triggers the evaluation for whether to return a survey on the current pageview.
{% endhint %}

### Device Data

```javascript
pi('set_device_data', object);
```

Example:

```javascript
pi('set_device_data', {userid: '1234', age: 32, locale: 'en-US'});
```

## Contextual Data FAQs

### When should I use Device Data vs. Context Data?

Context Data provides higher resolution in that it is stored with the impression and submission and thus is often the appropriate choice because it stores the values at the time the survey was submitted. Device data offers the capability to target across page views and sessions, so is beneficial for targeting, as long as the data remains stable over time.&#x20;

### Is context and device data available in exports?&#x20;

Yes. Device and Context data have columns in the raw data exports.&#x20;

### Is context and device data available to integrations?

Yes. This includes both on-page JavaScript callbacks and API-based integrations.

### How do I validate what context and device data Pulse Insights is getting?

You can view Context Data in the PulseInsightsObject. You can view Device Data in PulseInsightsObject and via network calls in your browser dev tools. See [QA features](/implementing-pulse-insights-dev/implementing-on-web-and-mobile-web/qa-process-and-preview-mode) for additional information.

### How do I target surveys to specific values of device or context data?

See [Targeting](broken://pages/qFHmoG5f4wGOwerfXliu).&#x20;


# Client Key

Client Key is an optional way for Pulse Insights to store a persistent identifier associated with a user, which unlocks a few key features:

## Use Cases for Client Key

### Cross-device linkage

Client key can link different browsers (e.g., home vs. work), devices, and channels so that Pulse Insights can decision at the person-level. For example, if a personal has already answered a particular survey on a home browser, Pulse Insights wouldn't serve it again in a different browser or device that shares the same client key, because the person has already answered it. Without Client Key, Pulse Insights would see the different browsers as independent.

### Cross-device frequency caps

Pulse Insights can deploy its [frequency caps](broken://pages/iFBFppBaq394lOd4Sz8Y) features at a person-level, so that a person doesn't get over-surveyed, even if their visits are spread across different channels, devices, and browsers.

### As a key for external system integrations

Often times, Client Key is a primary ID used to identify a user across systems in an organization. As such, it's used as a key to determine which record to update, say in a CRM system.&#x20;

## Syntax & Example

```javascript
pi('identify_client', 'clientkey');
```

For example:

```javascript
pi('identify_client','abc123');
```

## Validating Client Key Data

### Validating In the browser

You can see Client Key values that were set in the current pageview in the PulseInsightsObject.

<div align="left"><figure><img src="/files/rs6BvJ5rv6kGgfbRE6x1" alt=""><figcaption></figcaption></figure></div>

Client key values are also stored in local storage.

{% hint style="info" %}
The client key is stored in PulseInsightsObject until an impression or submission occurs on that pageview. `identify_client` doesn't generate its own network call.

Once set on a device, it needn't be redefined on subsequent pageviews or visits.
{% endhint %}

### Validating In reporting

Client key data will be in the Client Key column of the XLS and CSV exports from console.&#x20;

## Client Key FAQs

### Can I use Context or Device Data to store our user identifier instead?

Yes. You only need to use Client Key if you want to use cross device linkage and frequency cap features. Integrations can be configured to utilize Context or Device data values as well.

### Will the Client Key apply to previous impressions and submissions that occurred on that device before Client Key was defined?

Yes, in reporting and analysis, as the client key becomes associated with the Device UDID, including all past and future impressions and submissions. For decisioning (e.g., cross device frequency caps) and standard integrations, it is used going forward. &#x20;


# Tracking Events (aka High Value Actions)

Tracking Events enables you to inform Pulse Insights that an important event occurred, typically related to a website goal or action, so that you can later correlate survey responses with it.

{% hint style="info" %}
Tracking events is **optional**, but **highly recommended** because it unlocks the ability to quantify the impact of what is typically siloed qualitative data.&#x20;
{% endhint %}

## Example Use Case

By informing Pulse Insights that a purchase event occurred, you can correlate survey responses with a purchase event. This helps you understand how different survey responses affect the probability of a purchase. For example, you could learn the "cost" of missing information on your product pages in terms of lost sales.

## The two ways to track events

### Using JavaScript

On any page that has the Pulse Insights code snippet, you can push event data like so:

```javascript
pi('track_event', 'Purchase', {plan: "Gold", value: 50.00});
```

{% hint style="info" %}
The two key benefits of this method are that you can dynamically populate data (like the purchase plan and price in the example above) to aid in custom analysis, and that you needn't rely on an event being simply a visit to a URL.
{% endhint %}

### In Console, by watching for visits to certain URLs&#x20;

In Console, you can configure visits to a particular URL to create an Event. This method is described in the [Console Configuration](broken://pages/RyFxKKurREonxrMZIFpe) section.&#x20;

## Recommended Events or High Value Actions To Consider Collecting

| Event                   |
| ----------------------- |
| Conversion              |
| Add to cart             |
| Key feature enrollments |
| Lead submissions        |
| Cancellation            |
| Support ticket creation |

{% hint style="info" %}
Just a few events goes a long way. Think of the top 2-3 things that indicate success or a problem on your website and start there.
{% endhint %}

###


# Presenting a specific survey

For instances where you would like to bypass the targeting engine and control when a survey is displayed, such as when a user clicks a "give feedback" link, you can use the Present method.

## Three ways to use the present method

### By using a specific survey ID

```
pi('present', '1234'); // Where 1234 is the ID of the survey you'd like to present
```

{% hint style="info" %}
You can find the ID of a survey in Console. If you are a developer that doesn't have access to Console, you can ask your Client Success Manager to help you.
{% endhint %}

### By using a Present Alias

A Present Alias enables you to use a name instead of a Survey ID. This gives you the flexibility to change the survey that will trigger in Console, without having to update your code to swap the Survey ID.&#x20;

```javascript
pi('present', 'alias');
```

{% code title="For example" %}

```javascript
pi('present', 'feedback_form_us-en');
```

{% endcode %}

### By using a query string parameter in the URL

For cases, where you're linking to a page and want the page to trigger a specific survey on page load, you can append the following query string into the URL:

By Survey ID:

```javascript
https://url.com/?pi_present=1234 //where 1234 is the ID of the survey
```

By Present Alias:

```
https://url.com/?pi_present=feedback_form_us-en
```

## Common Use Cases For Using Present Method

| Case                                                                                          | Comment                                                                                         |
| --------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------- |
| Feedback tabs or footer links                                                                 |                                                                                                 |
| Redirect links from email surveys that should display a Thank You message or follow-up survey | Use the query string parameter ?pi\_present for this use case                                   |
| Button clicks that should trigger a survey                                                    | You can also listen for button clicks without using the present method using Console targeting. |
| For events that are visible to the back-end but not to the client                             |                                                                                                 |


# Supporting Inline surveys

An inline survey is a survey that looks and acts like part of the page. Users get frustrated with various popups as they browse, so inline surveys are a great way to capture feedback contextually in a way that doesn't feel like an interruption or afterthought.

Pulse Insights needs a Target CSS Selector (configured in Console) to insert inline surveys.&#x20;

The positioning of inline surveys is dictated by their **Target** (CSS selector), **Location** (Above/Inside/Below) and, if located inside the target, the **Order** with Target (First/Last).&#x20;

See more details in the [Formatting section](broken://pages/qjLxxvYTvRqypS9lANyU) of Console Configuration.

## Inline Survey FAQs

### Do I need to create a specific div to host inline surveys?

{% code title="Example:" %}

```html
<div id="pulse-survey"></div>
```

{% endcode %}

In most cases, **you** **don't** need to create an empty div. As long as there is a consistent CSS selector, that will suffice.&#x20;

There are two cases where it is helpful to have a dedicated div to host the surveys:

* the survey is targeted to show across multiple pages and not all pages contain the same CSS selector&#x20;
* the structure of the page changes (e.g. different page content for customers vs. prospects)


# Callbacks

Callbacks enable custom functionality such as:

* Integrating with custom vendors that use tag-based integrations on your website
* Ingesting data from the dataLayer
* Creating custom logic or functionality

## Two Ways To Implement Callbacks

### JavaScript

```javascript
pi('oncomplete', function(survey) {
     ... your callback code here ...
  });
```

### In Console

You can manage callback code in Console, described in more detail [here](/configuring-pulse-insights-console/account-level-settings/data-and-integrations-callbacks).&#x20;

## **Callback Types**

| Type                                                                 | Executes When                                              | Details                                                                                                                                                                                                                                                                                                                                                                                                                   |
| -------------------------------------------------------------------- | ---------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| <p><strong>On Impression</strong><br><code>onimpression</code></p>   | Platform delivers a survey to the page                     |                                                                                                                                                                                                                                                                                                                                                                                                                           |
| <p><strong>On Viewed Impression</strong><br><code>onview</code> </p> | Survey appears in the viewport                             | <p>When a survey is configured to display as soon as the page loads, the Viewed Impression callback will execute right after the Impression callback</p><p></p><p>Conversely, when a survey is dependent on user behavior (time on page, scroll percentage, etc.) or is attached to a page section that is not visible on page load, the Viewed Impression callback will only execute when the survey becomes visible</p> |
| <p><strong>On Answer</strong><br><code>onanswer</code></p>           | User submits an answer                                     | Can fire multiple times for a multiple question survey                                                                                                                                                                                                                                                                                                                                                                    |
| <p><strong>On Complete</strong><br><code>oncomplete</code></p>       | All questions in a survey path are answered                | When a survey contains a single question, the Oncomplete callback will execute right after the Onanswer callback                                                                                                                                                                                                                                                                                                          |
| <p><strong>On Close</strong><br><code>onclose</code></p>             | The survey is closed                                       |                                                                                                                                                                                                                                                                                                                                                                                                                           |
| <p><strong>On Click</strong><br><code>onclick</code></p>             | An anchor tag within a custom content question is clicked. | This callback is only available to use when the account setting "Custom Content Link Tracking" is enabled.                                                                                                                                                                                                                                                                                                                |


# Privacy Features

Pulse Insights maintains privacy-related features and processes to work within your organization's privacy requirements.

## Consent Process Recommendation

For markets and websites that require explicit user consent: we recommend using your cookie consent solution to load the Pulse Insights tag only after the user has given consent.&#x20;

## Revoking consent

If user revokes consent, you can use this method to inform Pulse Insights:

```javascript
pi('visitor_tracking',false);
```

This does the following:&#x20;

* Clears any Pulse Insights values in local storage
* Turns off local storage, so that Pulse Insights won't store any identifiers (e.g., Device UDID) or other data like number of visits or pageviews in session. [View what is stored in local storage](/implementing-pulse-insights-dev/implementing-on-web-and-mobile-web/privacy-features/identifiers-cookies-and-local-storage).&#x20;

## Turning on local storage (re-gaining consent)

You can enable storing identifiers in local storage with this method:

```javascript
pi('visitor_tracking',true);
```

{% hint style="info" %}
By default, when the Pulse Insights tag is loaded, tracking is set to `true`. It only needs to be explicitly set to `true` if it was previously explicitly set to `false`.
{% endhint %}

### Personal Information Detection & Error Messaging

Pulse Insights automatically monitors open-text responses in surveys to help prevent the collection of personally identifiable information (PII). If a response appears to include sensitive information, the user will see the following error message:

> **"Oops, looks like you are trying to submit personal information."**

This behavior is controlled at the account level via **Data Masking Settings**, and is enabled by default for all accounts with PII restrictions in place.

**Trigger Criteria**

The system triggers this error when open-text input contains patterns that match known PII formats. These include:

* **Email addresses**
* **Phone numbers**
* **Social Security Numbers (SSNs)** or similar government ID formats (U.S. or international)
* **Credit card numbers**
* **Driver’s license numbers**
* Any string containing a **large number of consecutive digits** (to detect structured numerical identifiers)

Detection is pattern-based and may vary slightly depending on regional formatting (e.g., U.S. vs EU identifiers), but it is primarily designed to catch sensitive data entry, not general personal information like names or dates.

**Customization**

The error message text can be customized for each free text question using the **Error Text** field in the Console. If no custom message is entered, the default system message will display.

## Privacy FAQs

### Can we still use Pulse Insights for users that didn't give or revoked consent?

If you still load the Pulse Insights tag, Pulse Insights will continue to function but some features that rely on local storage will not work. For example:

* Some targeting such as frequency caps, visit counts, pageview counts, or 'don't show again if the user already answered' won't work since they all rely on having a device udid or values in local storage.&#x20;

One use case that can still work well without tracking enabled is a Customer-Initiated Feedback form, where the user explicitly requests to give feedback.

### How do we handle data deletion or other privacy-related requests?

Reach out to your Client Success Manager who can help guide you.&#x20;

<br>


# Identifiers, cookies, and local storage

The following is what Pulse Insights stores in local storage and its purpose.

{% hint style="info" %}
Pulse Insights uses local storage instead of cookies. Some cookie consent crawlers only scan for cookies, so please use the table below to inventory what data Pulse Insights stores in local storage and how it is used.
{% endhint %}

## Local Storage Items

| Name                         | Example Value                        | Use                                                                                                                                                                               |
| ---------------------------- | ------------------------------------ | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| pulse\_insights\_udid        | 68eb4293-c71b-4906-820c-fb86b51a9f57 | Random identifier assigned to the device used as key to store impressions and submissions                                                                                         |
| pi\_pageview\_count          | 2                                    | Counts the number of pageviews in current session to enable pageview targeting such as "only show after 3+ pages"                                                                 |
| pi\_visit\_count             | 1                                    | Counts the number of visits to enable targeting such as "don't show survey if it's the first visit"                                                                               |
| pi\_visit\_track             | 1683139204312                        | Determines whether a pageview is part of a new or existing session.                                                                                                               |
| pulse\_insights\_client\_key | abc123                               | Optional. Stores [Client Key](/implementing-pulse-insights-dev/implementing-on-web-and-mobile-web/client-key) (your ID for the user) that you  explicitly send to Pulse Insights. |


# Data that Pulse Insights stores

Pulse Insights evaluates & stores data from your end-users to perform its core functions of:

* Determining if and how a survey should be served
* Capturing explicit user responses to survey questions
* Analyzing the responses to generate insights for your business
* Performing QA of data and user experience

## The following is a list of data that Pulse Insights stores along with how it is used.

| Data                                                                    | How it is used                                                                                                                        | Comments                                                                                                                 |
| ----------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------ |
| **DEVICE-RELATED**                                                      |                                                                                                                                       |                                                                                                                          |
| Device UDID                                                             | Random identifier assigned to the device used as key to store impressions and submissions                                             |                                                                                                                          |
| User Agent                                                              | Analysis and QA of survey data by device characteristics such as mobile vs. desktop responses.                                        |                                                                                                                          |
| Operating System                                                        | Inferred from user agent                                                                                                              |                                                                                                                          |
| Browser & version                                                       | Inferred from user agent                                                                                                              |                                                                                                                          |
| Screen Resolution                                                       | Analysis and QA of survey data                                                                                                        |                                                                                                                          |
| Device Type                                                             | Inferred from screen resolution                                                                                                       |                                                                                                                          |
| IP Address                                                              | QA of survey data such as potential bot or testing traffic                                                                            | This field is an account-level option with settings to turn off, obfuscate the last octet, or store the full IP address. |
|                                                                         |                                                                                                                                       |                                                                                                                          |
| **USAGE-RELATED**                                                       |                                                                                                                                       |                                                                                                                          |
| Submission URL                                                          | Targeting and analysis such as 'serve only on X URL' or 'compare user satisfaction by URL'                                            |                                                                                                                          |
| Number of visits                                                        | Targeting and analysis                                                                                                                |                                                                                                                          |
| Number of pageviews in current session                                  | Targeting and analysis                                                                                                                |                                                                                                                          |
|                                                                         |                                                                                                                                       |                                                                                                                          |
| **DATA YOU MAY  OPTIONALLY EXPLICITLY PASS TO PULSE INSIGHTS TO STORE** |                                                                                                                                       |                                                                                                                          |
| Client Key                                                              | Used to store a persistent anonymous (to Pulse Insights) identifier to link survey data with your internal user data                  |                                                                                                                          |
| Contextual Data                                                         | Used to store contextual data about the user, experience, or behavior                                                                 |                                                                                                                          |
| Events                                                                  | Used to indicate that a user did something of note such as converted, so that the event data can be correlated with survey responses. |                                                                                                                          |
|                                                                         |                                                                                                                                       |                                                                                                                          |
| **EXPLICIT RESPONSE DATA**                                              |                                                                                                                                       |                                                                                                                          |
| Response details                                                        | What was served to the user and the actual explicit response such as a satisfaction score                                             |                                                                                                                          |
| Timestamp                                                               | The date and time of the response                                                                                                     |                                                                                                                          |


# QA Process and Preview Mode

We recommend fitting Pulse Insights survey launches into your standard pre-launch QA processes, including documentation, QA, accessibility testing, approvals, and post-launch validation. The follow are features that can help QA surveys in preparation for launch.

## Two ways to validate surveys pre-launch

### Preview Mode

Preview mode enables *your browser* to see Draft status surveys in order to validate logic, formatting, accessibility, and targeting. This allows you to validate in production before end-users will see the survey.

### Deploy to Staging Environment

You can also set your survey status to Live but change the targeting URLs to your Staging Environment to perform necessary QA there.&#x20;

## About Preview Mode

Preview mode enables Pulse Insights to return Draft Status surveys with some important changes:

* Survey results aren't saved because it is test data
* Callbacks aren't executed because they could pollute other systems with test data
* Frequency caps are ignored, because that would prevent repeat testing

{% hint style="info" %}
Preview mode enables serving to behave as if Draft Status surveys were Live. That means that Pulse Insights can return both Live and Draft surveys when evaluating targeting criteria. If you want to force a particular survey to show, use the [Present method](/implementing-pulse-insights-dev/implementing-on-web-and-mobile-web/presenting-a-specific-survey) while in Preview mode.
{% endhint %}

## How to enter Preview Mode

The Pulse Insights tag must be live on the page you are previewing on.

### JavaScript

```javascript
pi('preview',true);
```

### Query String Parameter

You can append the following query string to any URL that has the Pulse Insights tag live:

```
?pi_live_preview=true
```

### Console Preview Button

You can access Live Preview in our Console by clicking the “Live Preview” icon in the bottom bar of the Edit Survey pages and then entering the URL to preview on. The Pulse Insights tag must be on the target page in order for surveys to show.

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

{% hint style="info" %}
If the tag is not yet live, but you want to preview surveys, Pulse Insights also maintains a Bookmarklet to emulate the tag being deployed on your site. Reach out to your Client Success Manager for details.
{% endhint %}

###

## How to exit Preview Mode

### JavaScript

```javascript
pi('preview',false);
```

### Query String Parameter

You can append the following query string to any URL that has the Pulse Insights tag live:

```
?pi_live_preview=false
```

## How to validate Preview Mode status

You can look in PulseInsightsObject in browser dev tools console to validate Preview Mode status and learn more about the decisioning steps and data.&#x20;

<div align="left"><figure><img src="/files/deIUSVlpDYPTVXspCRXg" alt=""><figcaption></figcaption></figure></div>


# JavaScript Object

You can use your browser dev tools to view `PulseInsightsObject` to get insights into what Pulse Insights is doing.&#x20;

<div align="left"><figure><img src="/files/3kvZn4Kn5XdqIyhyQIeS" alt=""><figcaption></figcaption></figure></div>

## Descriptions

**logMessages** can help trace while a particular survey is or isn't being returned.

**customData** is a synonym for [Context Data](/implementing-pulse-insights-dev/implementing-on-web-and-mobile-web/ingesting-contextual-data-for-targeting-and-analysis) and tells you what will be sent with any response data

**previewMode** tells you whether you are in Preview Mode, which enables you to receive Draft Mode surveys. See [QA Features](broken://pages/z0RqSHl9SeQHbhUMqsQ8) for more details.


# Single Page Apps

Pulse Insights handles single page apps natively with no additional changes or modifications on your part.&#x20;

## On State Change

State changes are treated like new pageviews, and Pulse Insights will evaluate whether a survey is eligible to be returned on each state change.&#x20;

{% hint style="warning" %}
Don't re-load the Pulse Insights tag on each state change. It adds unnecessary overhead and could even interfere with proper functioning.
{% endhint %}

{% hint style="info" %}
Some browser have a back forward cache that preserves the state of the page when users navigate via back/forward buttons. In this case, the page doesn't call Pulse Insights again. Since Pulse Insights wasn't called, we won't increment an impression or evaluate frequency caps, but the user experience will perform as expected.
{% endhint %}

## For tags deployed prior to 2019 intending to use Single Page Apps

We recommend adding the following line to your code snippet above `'get', 'surveys'`.

```javascript
pi('pushBeforeGet', true);
```

This command will push the state before making the serve call for surveys and will ensure that the serving logic is using the latest URL for survey targeting.


# Load Time & Availability

{% hint style="info" %}

### If you need production support help now

You can:

* write <support@pulseinsights.com>
* call 888-718-6860
* write your client success manager (US business hours)
  {% endhint %}

Pulse Insights was designed to be highly performant and available. We understand that our tag's availability and speed can impact your business metrics and take that responsibility seriously.&#x20;

## Details about how our tag works

### The Pulse Insights Library (surveys.js) is hosted on a CDN

This places the file near your users to reduce network latency and provides high redundancy in case of any individual server downtime.&#x20;

### The Library (surveys.js) is compressed

This minimizes transfer times on slower connections.&#x20;

### The Library loads async

This makes sure that it doesn't prevent other content from loading or other scripts from executing.

### Pulse Insights logs all response times from endpoints such as requesting surveys, questions, etc.&#x20;

This enables us to monitor response times by endpoint and client account. Internal alerts are configured if response times exceed a threshold, so we can investigate.

### Pulse Insights relies on local storage instead of cookies

Every time a page is requested, every cookie is sent along with the request, creating unnecessary overhead. So, Pulse Insights utilizes local storage as an alternative.

{% hint style="info" %}
Please see our [Privacy section](/implementing-pulse-insights-dev/implementing-on-web-and-mobile-web/privacy-features) as it relates to using local storage instead of cookies.&#x20;
{% endhint %}

##

## Performance and Availability FAQs

### Can we host the surveys.js library on our CDN instead of Pulse Insights' CDN?

Yes. Please ensure that it stays up to date with the latest version to prevent potential issues where the library and endpoints are incompatible.&#x20;


# Bot blocking

Pulse Insights attempts to recognize and block bot traffic so that bots don't see impressions, which can skew the reporting/accuracy of survey response rates. Our analysis shows that most client bot traffic is from crawlers such as search engines and security vendors.

There are two primary mechanisms for bot recognition:

* IP address requests over a threshold within a time window
* Maximum cumulative impressions for a single Device UDID

The exact values change from time to time to allow for heavy real usage by development and QA teams, while still blocking likely bots.&#x20;

Once traffic is identified as a bot, Pulse Insights will not return surveys unless explicitly unjailed by by Pulse Insights. Or, once max cumulative impressions for a single UDID is reached, any additional impressions or responses won't be recorded.


# Customer-initiated Feedback

Customer-initiated feedback enables users to provide you with proactive feedback from wherever they are on your website. Implementing customer-initiated feedback is a great way to ensure that you are always listening to your customers.

## The User Experience

<div align="left"><figure><img src="/files/XNyoAClKE39U0nlWa5WE" alt=""><figcaption><p>Examples of Feedback Tab or Footer Link Placement</p></figcaption></figure></div>

On every page of your web experience, an invitation for users to give proactive feedback will display. The two most common mechanisms for inviting feedback are a fixed feedback tab docked to the side of the browser or a link in the footer of your web and mobile web experiences.

When a user clicks the invite, a modal All-at-once (AAO) survey will appear to collect the user's feedback.

<div align="left"><figure><img src="/files/XPUOoZynbQr9AQlDPojY" alt=""><figcaption><p>Examples of AAO modal survey on desktop &#x26; mobile.</p></figcaption></figure></div>

## How customer-initiated feedback works

Customer-initiated feedback is comprised of two key components:

1. The on-page invitation has an on-click behavior to trigger the appropriate feedback form using the [Present Method](/implementing-pulse-insights-dev/implementing-on-web-and-mobile-web/presenting-a-specific-survey). This method optionally passes data, such as the market and language.<br>
2. The survey(s), which are typically configured to use AAO mode to resemble a form, are displayed as a modal widget.

## Your code snippet

In order to display the feedback tab or footer link, Pulse Insights will modify your code snippet.

{% hint style="success" %}
If you'd prefer to control the footer link or feedback tab, Pulse Insights will give you the JavaScript method necessary to enable trigger the feedback modal upon the user's click.
{% endhint %}

## Recommendations for what to capture

Common fields include:

* Feedback category: Create a dropdown menu so that you can contextualize and route the feedback internally. For example, users might choose between:
  * App, website, in-store location, etc.
  * Returns, Product Pages, Search/Browse
* A comment field to capture the proactive feedback that users want to give<br>

&#x20;Customer KPIs that measure website performance, such as:

* Intended task or the primary purpose of their visit
* The user's ability to complete their primary task
* Audience profile
* Satisfaction with the website or brand

{% hint style="success" %}
We recommend limiting the number of KPI data points to one or two, if feasible, to minimize the friction of users providing you feedback.&#x20;
{% endhint %}

{% hint style="info" %}
Results may be biased by the fact that customer-initiated feedback is proactively given. Despite the bias, results still provide value and trend analysis over time.&#x20;
{% endhint %}

## Inputs we'll need from you

In order to configure customer-initiated feedback on your behalf, we'll ask you about:

* User experience of the on-page invite (tab, feedback link)
* If and how your mobile web experience differs from desktop
* Who will host the on-page invite (Pulse Insights or you)?&#x20;
* Questions and formatting decisions for the feedback form, so we can configure it on your behalf
* If your implementation is global or multi-language. If so, we will need the method for identifying the market and language
* Any contextual data you'd like to ingest, such as authentication status
* Any special reporting or integration needs for the data

<br>


# Implementing in email

Collecting feedback and preferences in email channels is critical because it's a primary customer touchpoint for many customers and getting interactions in this channel wrong can reduce overall customer engagement and lifetime value.&#x20;

{% hint style="success" %}
Pulse Insights has a different approach than most email surveys. We recommend collecting feedback, contextually, in emails that you are already sending to get feedback on what is in your users' heads as they interact with that email. Often times that means Pulse Insights collects information via short question just above the footer of the email.
{% endhint %}

## Key Differences with Web implementations

Implementing in Pulse Insights in emails channels has some notable differences from implementing on web. While, generally speaking, the email channel has more limited capabilities, the insights and data that stem from it are still incremental and impactful to your business.

{% hint style="info" %}
This table refers to surveys in standard HTML emails. Pulse Insights also supports [Dynamic Email](/implementing-pulse-insights-dev/implementing-in-email/dynamic-email), which has expanded capabilities, but not all ESPs and email clients support it.&#x20;
{% endhint %}

| Web Channel                                                                                     | Email Channel                                                                                                                                                                       |
| ----------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| Surveys are dynamically decisioned on each pageview for each user by Pulse Insights             | Surveys are decisioned at send-time at the Email Service Provider in collaboration with your email team                                                                             |
| Survey formatting is controlled by Pulse Insights and configured in Console                     | Survey formatting is controlled by your email team and configured by your email team                                                                                                |
| Implementation is via JavaScript code snippet placed on your website                            | Implementation is via links (one per answer) from Console that are then used in your HTML email                                                                                     |
| Surveys support multiple question types, branching, and free text capture in the same pageview. | In the email itself, single-choice questions are supported. Clicking a response opens a web experience to your website that contains any Thank You messages or follow-up questions. |

## How It Works

<details>

<summary>Creation</summary>

* Each answer of the first question of the survey is a dedicated link from Pulse Insights.&#x20;
* The links are coded specifically for your email service provider to insert any desired macro or personalization tags to, say, pass a User ID.
* You will also need the [tag](/implementing-pulse-insights-dev/implementing-on-web-and-mobile-web/deploying-your-tag-code-snippet) on the landing page to enable on-site follow up questions and Thank You messaging.
* Your email team inserts the survey links into the email or template applying the appropriate html/formatting.
* Pulse Insights can be part of the proof send process to validate user experience and data.

</details>

<details>

<summary>User Experience</summary>

* Typically, the survey or preference capture is below the primary body content but above the footer.
* When a user clicks any survey link, Pulse Insights records the response and any associated data like User ID. There isn't a need for the user to answer again on the subsequent page like in some other email survey platforms.
* Pulse Insights redirects the user to a relevant page on your website, to further engage with the content and your brand.
* On that webpage, Pulse Insights can display follow-up questions, a thank you message, or utilize any other capabilities that exist in the web channel such as Next Best Action.

</details>

<details>

<summary>Data &#x26; Integrations</summary>

* If you have any integrations to your Data Lake, CDP, CRM, or ESP they will occur per the specs of the integration.

</details>

## Anatomy of a Pulse Insights link

<figure><img src="/files/Wbme624wUcpuSXpoO70S" alt=""><figcaption><p>Example of a custom link</p></figcaption></figure>

* Each survey link:
  * Tracks the user’s response
  * Records the Client Key and other Context Data (optional)
  * Redirects the user to the landing page and displays the appropriate follow up question or Thank You message on the page.

{% hint style="info" %}
Please let your CSM know the domain of landing page so they can properly configure the link and whitelist the domain.
{% endhint %}

## Email Survey FAQs

### What contextual data should we pass via the links?

Most commonly you'll want to pass a user identifier so that you can know who answered and follow-up if necessary. This also can enable integrating the data at a user level throughout your organization - e.g., inserting the feedback or preference into a CRM, CDP, or back in the ESP.

See other [common contextual data](/implementing-pulse-insights-dev/implementing-on-web-and-mobile-web/ingesting-contextual-data-for-targeting-and-analysis) to consider passing to Pulse Insights.

### How do we pass user ID via the survey links?

It is passed to Pulse Insights via merge tags (also known as a macros, tokens, or personalization tags, depending on the ESP). The syntax differs by email service provider and often have a form like

```
{{user_id}}
```

or

```
%%user_id%%
```

<br>


# Dynamic Email

Dynamic Email addresses some of the inherent limitations of email technology, and enables a far richer survey (and overall email) experience. However, because it is a new standard, not all ESPs or email clients support it. <br>

<div align="left"><figure><img src="https://lh5.googleusercontent.com/pAbo1g02vzpnwgib1aCfg_sWn9s_WXrqOyNHc7n_o_TDrK5vqg3zhDZYawfqu3B26XXWsLV0Tcw778s6oHipc6YYsSfLV_DgVKLC2HslLFCzmn_gTVksCmaW5cWcc_ahpNUnSM_7_5etEmmAskiEXdwxcQ=s2048" alt="" width="188"><figcaption></figcaption></figure></div>

### &#x20;Key differences between HTML email and “Dynamic Email Surveys

Dynamic email surveys provide a rich, personalized, web-like experience in email.

| HTML Email Surveys                                                                                                                        | Dynamic Email Surveys                                                                                                                         |
| ----------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------- |
| Survey/campaign is hardcoded in the email as links.                                                                                       | Survey/campaign is dynamically displayed within the email. A code somewhat parallel to a website tag is placed in the email to enable it.     |
| Clicking any answer (or any link in the email) opens up a web browser window.                                                             | Clicking an answer does not open up a web browser/new tab. Answer is captured within the email and without the need to pop open a new window. |
| You can only show one single-choice question in the email. Any followup questions need to be shown and completed on the web landing page. | You can have multiple questions inside the email itself                                                                                       |
| Question branching is not supported (only one question is supported)                                                                      | You can have dynamic question branching, like on web.                                                                                         |
| Can only ask a single choice question in-email.                                                                                           | Multiple question types are supported, including free text. For now, the first question needs to be a single choice question.                 |
| User responses are tracked via custom links the client will embed in their email.                                                         | User responses are tracked via a code snippet from Console, without leaving the email.                                                        |

## Getting your Dynamic Email code snippet

You can find your code snippet in Console under Settings > Get Code Snippet > Dynamic Email.

<br>


# Implementing in Native Apps

## When to use Mobile Web vs SDK

<table><thead><tr><th>Web integration is a good fit if:</th><th>SDK is a good fit if:</th><th data-hidden></th></tr></thead><tbody><tr><td>The mobile app uses webview for many of its screens</td><td>The app primarily uses native components (vs webview)</td><td></td></tr><tr><td>You want to leverage CSS for formatting or styling your surveys</td><td>You want to use native-only survey triggers such as number of launches and days since install</td><td></td></tr><tr><td><p>You want to leverage browser-based events, such as scrolling or</p><p>tapping specific elements, to trigger survey/poll triggers</p></td><td></td><td></td></tr><tr><td>You want to use URL-based targeting </td><td></td><td></td></tr><tr><td>You want to use JavaScript callbacks to customize the functionality and provide client-side integrations</td><td></td><td></td></tr><tr><td>You want to use web-specific capabilities such as All At Once (e.g., Feedback forms).</td><td></td><td></td></tr></tbody></table>

## Cross-channel By Design&#x20;

A single Pulse Insights survey or poll is designed to work across browser-based and Native SDK-based experiences. For example, you can configure a single survey to deliver across both native mobile and browser-based channels. Many targeting criteria are also inherently cross-channel:

<figure><img src="/files/vJscdFpbk3jL3LDKrovG" alt="" width="375"><figcaption></figcaption></figure>

Of course, Pulse Insights also supports creating channel-specific surveys. For example, if you want the native mobile survey to include an invitation but want web-based surveys to appear directly within the page (without invitation), you might opt to create two channel-specific surveys instead of one shared survey.

## Key Similarities & Differences&#x20;

While there are many similarities and shared features across web and native apps, there are key differences in how the channels work. The following list, although not comprehensive, aims to convey the most important differences that should be considered when managing cross-channel campaigns.&#x20;

### Survey Creation

#### Similarities:&#x20;

The majority of features are compatible across web and native SDK channels including:&#x20;

* Survey invitations and text&#x20;
* Question types (open-ended, single choice, multiple choice)&#x20;
* Question branching&#x20;
* Polls (the ability to show results to end-users)

#### Differences:

Web-based executions enable some features that rely on browser constructs such as:

* Custom Content cards, which use HTML to display links or other content, usually at the end of a survey
* Using images for answers&#x20;
* All-At-Once mode, which displays multiple questions at a time

### Targeting

#### Similarities:

Many targeting features are shared or managed centrally in the Console across web and native SDK channels including:&#x20;

* Eligible dates
* Device Type eligibility
* Page/URL/View conditions
* Previous answer targeting
* CRM targeting (based on Context or Device Data pushed to Pulse Insights)
* Sample Rate
* Behavior (e.g., whether to show again if the user closes the survey)
* Global Frequency caps

#### Differences:

{% tabs %}
{% tab title="Mobile Web" %}
Some web targeting features rely on browser-specific technologies including:&#x20;

* Browser-based event listeners, such as click, scroll, and content in view triggers
* Browser-based visit counters and session depth counters
  {% endtab %}

{% tab title="Native SDK" %}
Some SDK features rely on channel-specific technologies including:

* Days since app was installed triggers&#x20;
* Number of cumulative launches triggers
  {% endtab %}
  {% endtabs %}

### Display

#### Widget Types

{% tabs %}
{% tab title="Mobile Web" %}
Browser-based executions leverage CSS and DOM manipulation to seamlessly insert surveys into the user experience using a number of widget formats:&#x20;

* Full screen overlay&#x20;
* Bottom bar
* Inline (managed in the Pulse Insights Console via CSS selectors)
* Docked widget
* Top bar
  {% endtab %}

{% tab title="Native SDK" %}
Native mobile supports fewer widget types and uses native mobile components (such as input fields):&#x20;

* Full screen overlay
* Bottom Bar
* Inline

Docked Widget and Top Bar widgets are NOT available for Native SDK.
{% endtab %}
{% endtabs %}

#### Styling Options

{% tabs %}
{% tab title="Mobile Web" %}
Web-based executions use CSS which can be served dynamically at runtime from the Pulse Insights Console.

* Accounts can have one or more shared themes – CSS that formats surveys for various question types, widget types, and device types. Additionally, web supports overriding the theme at a survey-level.
  {% endtab %}

{% tab title="Native SDK" %}
SDK styling is more limited; you can configure approximately 50 properties, such as font color and size, using SDK Themes in the Console:

* Styling is not driven by CSS, but uses native components and formatting instead
  {% endtab %}
  {% endtabs %}

### Data Integration

#### Data Out Similarities:&#x20;

Pulse Insights pushes data to CRMs and Enterprise Data Lakes via back-end callbacks and file-based integrations. These integrations work universally, regardless of the channel that collected the data.

#### Data Out Differences:

In addition to the back-end integrations mentioned above, web-based executions also enable client-side JavaScript callbacks. These are often used to integrate web analytics, A/B testing integrations, and other client-side technologies.

#### Data Ingestion:&#x20;

Channel-specific methods exist to ingest user information in Pulse Insights such as:

* Device Data
* Context Data
* Pseudo-anonymous CRM key

### Reporting

Data from browser-based, native mobile, and API-based channels all flow into the same reporting. Some reporting fields are specific to the channel such as:

* Browser
* Browser Version
* Completion URL


# Android (old)

## Installation

To install Pulse Insights in your application, follow those steps:

1. Add the `maven repositories target` and the `google repositories target` in the **build.gradle** script of the **project level** as the following example shows. Make sure you have **google()** in the top of **repositories** section in both of **buildscript** and **allprojects**

```
buildscript {
    repositories {
        google()
        ...
    }
}
allprojects {
    repositories {
        google()
        ...
        maven {
            url  "https://pi-sdk.s3.us-east-1.amazonaws.com/android"
        }
        ...

    }
}
```

2. Add the dependencies description in the **build.gradle** script of the **app level** as the following example shows.

```
dependencies {
    ...
    implementation 'com.pulseinsights:android-sdk:2.3.0'
}
```

> You only need to modify this implementation description with the available version name when you want to update the SDK in the future.

3. Sync the gradle script
4. If your app is targeting API level 28 (Android 9.0) or above, please make sure the following `<uses-library>` element description has been added inside the `<application>` element of `AndroidManifest.xml`. Check [the developer documentation](https://developers.google.com/maps/documentation/android-sdk/config#specify_requirement_for_apache_http_legacy_library) for more detail.

```
  <uses-library
      android:name="org.apache.http.legacy"
      android:required="false" />
```

## Usage <a href="#user-content-usage" id="user-content-usage"></a>

### 1. Initialization <a href="#user-content-1-initialization" id="user-content-1-initialization"></a>

When your application starts, you should initialize the library using the snippet below:

```
PulseInsights pi = new PulseInsights([context], YOUR_ACCOUNT_ID);
```

Replace YOUR\_ACCOUNT\_ID with your own PulseInsights ID, for example: PI-12345678.

You should subclass `Application` and provide a helper method that returns your application's PulseInsights object:

```
public class PulseInsightsApplication extends Application {

  private PulseInsights pi;

  synchronized public getPulseInsights() {

      if(pi == null)
          pi = new PulseInsights(this, YOUR_ACCOUNT_ID);

      return pi;
  }
}
```

You also need to provide the context of the Activity object to display the survey view or the invite widget.

```
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        ...
        pi.setContext(Context context)
        ...
    }
```

After this initial step, you can fetch the PulseInsights object as below:

```
new PulseInsights([context]);
```

### 2. View tracking <a href="#user-content-2-view-tracking" id="user-content-2-view-tracking"></a>

PulseInsights allows targeting surveys to a given screen name. In order for the SDK to know the current screen name, you can use the following method to notify it of the current screen name change:

```
pi.setViewName(String viewName);
```

For example, you can override the onCreate function or the onActivityResult function on the Activity class:

```
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        pi.setViewName("cus_MainActivity");
    }
```

```
    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        if (requestCode == MainActivity_REQUEST) {
            String result = data.getExtras().getString("result");
            if (result.equalsIgnoreCase("BACK_ACTIVITY")) {
                pi.setViewName("cus_MainActivity");
            }
        }
    }
```

### 3. Survey polling <a href="#user-content-3-survey-polling" id="user-content-3-survey-polling"></a>

The PulseInsights SDK will automatically regularly fetch surveys that would match various targeting conditions based on a frequency that you can override as shown below:

```
pi.setScanFrequency(int frequencyInSecond);
```

If you want to manually fetch new surveys, you can use this method:

```
pi.serve();
```

### 4. Render a specific survey <a href="#user-content-4-render-a-specific-survey" id="user-content-4-render-a-specific-survey"></a>

It is also possible to manually trigger a survey by its id:

```
pi.present(String surveyID);
```

### 5. Inline surveys <a href="#user-content-5-inline-surveys" id="user-content-5-inline-surveys"></a>

Inline surveys are rendered within the content of the application, instead of overlaying the application content.

In order to integrate inline surveys, you can programmatically create the `InlineSurveyView` object by assigning an identifier and inserting it into a view:

```
InLineSurveyView inlineView = new InLineSurveyView(Context context, String trackId);
```

You still can integrate inline surveys by adding the inline survey on the XML layout with the survey view class `com.pulseinsights.pisurveylibrary.util.InlineSurveyView`

```
<com.pulseinsights.pisurveylibrary.util.InlineSurveyView
            android:id="@+id/inline_survey"
            android:layout_width="match_parent"
            />
```

In this case, you can assign the identifier on the inline view by using the method `setIdentifier`

```
InlineSurveyView inlineSurvey;
inlineSurvey = (InlineSurveyView) itemView.findViewById(R.id.inline_survey);
inlineSurvey.setIdentifier(String trackId);
```

### 6. Survey rendering <a href="#user-content-6-survey-rendering" id="user-content-6-survey-rendering"></a>

You can pause and resume survey rendering with the following method:

```
pi.switchSurveyScan(boolean enable);
```

And check the current configuration with the following method:

* true: survey rendering feature is enabled
* false: survey rendering feature is paused

```
boolean renderingConfig = pi.isSurveyRenderingActive();
```

It is also possible to pause the survey rendering feature from the initialization of the Pulse Insights library:

```
ExtraConfig piConfig = new ExtraConfig();
piConfig.automaticStart = false;
PulseInsights pi = new PulseInsights(Context context, String accountId, ExtraConfig piConfig);
```

> You can check this article for learn more about the `ExtraConfig` class.

### 7. Client Key <a href="#user-content-7-client-key" id="user-content-7-client-key"></a>

Client key can be set using this method:

```
pi.setClientKey(String clientKey);
```

The configured client key can be fetched with this method:

```
String getKey = pi.getClientKey();
```

### 8. Preview mode <a href="#user-content-8-preview-mode" id="user-content-8-preview-mode"></a>

Preview mode can be enabled or disabled by:

```
Shaking the device more than 10-times in 3-seconds
```

Preview mode can be programmatically enabled/disabled by this method:

```
pi.setPreviewMode(boolean enable)
```

It is also possible to set the preview mode from the initialization of the Pulse Insights library:

```
ExtraConfig piConfig = new ExtraConfig();
piConfig.previewMode = true;
PulseInsights pi = new PulseInsights(Context context, String accountId, ExtraConfig piConfig);
```

> You can check this article for learn more about the `ExtraConfig` class.

In order to check the status of preview mode, use this method:

```
boolean isPreviewModeOn = pi.isPreviewModeOn()
```

### 9. Callbacks <a href="#user-content-9-callbacks" id="user-content-9-callbacks"></a>

If you want to know if a survey has been answered by the current device, this method can be used:

```
boolean answered = pi.checkSurveyAnswered(String surveyId);
```

It is also possible to configure a callback to be executed when a survey has been answered:

```
pi.setAnswerListener(new SurveyAnsweredListener() {
                    @Override
                    public void onAnswered(String answerId) {

                    }
                });
```

### 10. Context data <a href="#user-content-10-context-data" id="user-content-10-context-data"></a>

You can save context data along with the survey results, or for a refined survey targeting, using the `customData` config attribute, for example:

```
ExtraConfig piConfig = new ExtraConfig();
piConfig.customData = new HashMap<String, String>();
piConfig.customData.put("gender", "male");
piConfig.customData.put("age", "32");
piConfig.customData.put("locale", "en-US");
PulseInsights pi = new PulseInsights(Context context, String accountId, ExtraConfig piConfig);
```

> You can check this article for learn more about the `ExtraConfig` class.

### 11. Device data <a href="#user-content-11-device-data" id="user-content-11-device-data"></a>

If you want to set device data, which will be saved along the survey results, the method `setDeviceData` can be used as follows:

```
pi.setDeviceData(Map<String, String> map);
```

`setDeviceData` can be called at any time, it will trigger a separate network request to save the data.

### 12. Advanced <a href="#user-content-12-advanced" id="user-content-12-advanced"></a>

The default host is "survey.pulseinsights.com". If you want to target the staging environment, or any other environment, it's possible to override the default host:

```
pi.setHost(String surveyID);
```

The debug mode can be turned on and off:

```
pi.setDebugMode(boolean enable);
```

PulseInsights creates a unique UDID to track a given device. If you wish to reset this UDID, you can call the following method:

```
pi.resetUdid();
```

If you want to manually config the context, you can call the following method:

```
pi.setContext(Context context)
```

And get the context object that has been configured

```
Context context = pi.getContext()
```

### 13. Others <a href="#user-content-13-others" id="user-content-13-others"></a>

**1. ExtraConfig**

The ExtraConfig is the class to which you can apply the additional configuration from the initialization of the Pulse Insights library:

```
ExtraConfig piConfig = new ExtraConfig();
piConfig.automaticStart = false;
PulseInsights pi = new PulseInsights(Context context, String accountId, ExtraConfig piConfig);
```

You can apply the additional config with the following sub variables:

| Name           | function         | Default         | Usage                                                                                                                                                  |
| -------------- | ---------------- | --------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------ |
| automaticStart | Survey rendering | true            | <p>true - survey rendering will automatically started from the initialization<br>false - survey rendering will not started from the initialization</p> |
| previewMode    | Preview mode     | false           | <p>true - turn preview mode on<br>false - turn preview mode off</p>                                                                                    |
| customData     | Context data     | new HashMap<>() | Save data along with survey results                                                                                                                    |

## Themes <a href="#user-content-uninstall" id="user-content-uninstall"></a>

You can configure approximately 50 properties such as font color and size using SDK Themes in the Console:&#x20;

Styling is not driven by CSS, but uses native components & formatting instead.

To create a mobile app compatible theme in the Pulse Insights Console:&#x20;

1. Click the Settings dropdown menu from the top navigation bar
2. Select "Themes"

<figure><img src="/files/EW1DzI1J9aOtPjQ399Wv" alt="" width="164"><figcaption></figcaption></figure>

3. Click the "New Theme" button
4. Give a name to your theme
5. In the "Type" dropdown menu, select "Native"
6. Input your Native JSON theme into the code box
7. "Update"

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

## Uninstall <a href="#user-content-uninstall" id="user-content-uninstall"></a>

#### Remove 1.0.9 or later <a href="#user-content-remove-109-or-later" id="user-content-remove-109-or-later"></a>

1. Remove whatever you added when you go through the install flow
2. Sync or rebuild your project

#### Remove 1.0.8 or earlier <a href="#user-content-remove-108-or-earlier" id="user-content-remove-108-or-earlier"></a>

To remove the library from your project, please follow the steps below:

1. In the IDE, select \[File]->\[Project Structure]
2. Select `Modules` from the left menu and find the library you named when you installed. Select **remove** or **-**, then click **ok** to confirm.
3. Find and remove the following `implementation` statement from the `dependencies` section from the `app level` **build.gradle** script file.

```
dependencies {
    ...
    implementation project(path: ':pisurveylibrary')
}
```

4. Open the project folder, find and delete the sub-folder with the library display name.


# Android

## Release Notes

To see the latest release notes, please visit our [GitHub](https://github.com/Pulse-Insights/pi.android/releases).&#x20;

## Installation

To install PulseInsights on your application, follow those steps:

1. Add the `maven repositories target` and the `google repositories target` in the **build.gradle** script of the **project level** as the following example shows, make sure you have **google()** in the top of **repositories** section in the both of **buildscript** and **allprojects**

```
buildscript {
    repositories {
        google()
        ...
    }
}
allprojects {
    repositories {
        google()
        ...
        maven {
            url  "https://pi-sdk.s3.us-east-1.amazonaws.com/android"
        }
        ...

    }
}
```

2. Add the dependencies description in the **build.gradle** script of the **app level** as the following example shows

```
dependencies {
    ...
    implementation 'com.pulseinsights:android-sdk:2.4.4'
}
```

> You only need to modify this implementation description with the available version name when you want to update the SDK in the future

3. Sync the gradle script
4. If your app is targeting API level 28 (Android 9.0) or above, please make sure the following `<uses-library>` element description been added inside the `<application>` element of `AndroidManifest.xml` , you can check [the developer documentation](https://developers.google.com/maps/documentation/android-sdk/config#specify_requirement_for_apache_http_legacy_library) for more detail

```
<uses-library
    android:name="org.apache.http.legacy"
    android:required="false" />
```

## Usage

#### 1. Initialization

When you application start, you should initialize the library using the snippet below:

```
PulseInsights pi = new PulseInsights([context], YOUR_ACCOUNT_ID);
```

Replace YOUR\_ACCOUNT\_ID with your own PulseInsights ID, like PI-12345678.

You should subclass `Application` and provide a helper method that returns your application's PulseInsights object:

```
public class PulseInsightsApplication extends Application {

  private PulseInsights pi;

  synchronized public getPulseInsights() {

      if(pi == null)
          pi = new PulseInsights(this, YOUR_ACCOUNT_ID);

      return pi;
  }
}
```

You also need to provide the context of the Activity object for display the survey view or the invite widget

```
@Override
protected void onCreate(Bundle savedInstanceState) {
    ...
    pi.setContext(Context context)
    ...
}
```

After this initial step, you can fetch the PulseInsights object as below:

```
new PulseInsights([context]);
```

#### 2. View tracking

PulseInsights allow to target surveys given a screen name. In order for the SDK to know about the current screen name, you can use the following method to notify the SDK of the current screen name change:

```
pi.setViewName(String viewName);
```

For example, you can override the onCreate function or the onActivityResult function on the Activity class:

```
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    pi.setViewName("cus_MainActivity");
}
```

```
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    if (requestCode == MainActivity_REQUEST) {
        String result = data.getExtras().getString("result");
        if (result.equalsIgnoreCase("BACK_ACTIVITY")) {
            pi.setViewName("cus_MainActivity");
        }
    }
}
```

#### 3. Survey polling

The PulseInsights SDK will automatically regularly fetch surveys that would match various target conditions, based on a frequency that you can override as show below:

```
pi.setScanFrequency(int frequencyInSecond);
```

If you want to manual fetch new surveys, you can also directly use this method:

```
pi.serve();
```

#### 4. Render a specific survey

It's also possible to manual trigger the rendering of a survey by its id:

```
pi.present(String surveyID);
```

#### 5. Inline surveys

Inline surveys are rendered within the content of the application, instead of being rendered as pop-ups, overlaying the application content.

In order to integrate the inline surveys, you can programmatically create the `InlineSurveyView` object with giving an identifier and insert it into a view:

```
InLineSurveyView inlineView = new InLineSurveyView(Context context, String trackId);
```

You still can integrate the inline surveys by adding the inline survey on the XML layout with the survey view class `com.pulseinsights.pisurveylibrary.util.InlineSurveyView`

```
<com.pulseinsights.pisurveylibrary.util.InlineSurveyView
    android:id="@+id/inline_survey"
    android:layout_width="match_parent"
/>
```

In this case, you can assign the identifier on the inline view by using the method `setIdentifier`

```
InlineSurveyView inlineSurvey;
inlineSurvey = (InlineSurveyView) itemView.findViewById(R.id.inline_survey);
inlineSurvey.setIdentifier(String trackId);
```

#### 6. Survey rendering

You can pause and resume the survey rendering feature with the following method:

```
pi.switchSurveyScan(boolean enable);
```

And check the current configueration with the flollowing method:

* true: survey rendering feature is working
* false: survey rendering feature has been paused

```
boolean renderingConfig = pi.isSurveyRenderingActive();
```

It's also possible to pause the survey rendering feature from the initialization of the Pulse Insights library:

```
ExtraConfig piConfig = new ExtraConfig();
piConfig.automaticStart = false;
PulseInsights pi = new PulseInsights(Context context, String accountId, ExtraConfig piConfig);
```

> You can check [this article](broken://pages/hn0JSmnhTdBLPfpyMBA3) for learn more about the `ExtraConfig` class.

#### 7. Client Key

Client key can be setup using this method:

```
pi.setClientKey(String clientKey);
```

The configured client key can be fetched with this method:

```
String getKey = pi.getClientKey();
```

#### 8. Preview mode

The preview mode can be enable/disable by shake motion according the following rule:

```
Shake the device more than 10-time in 3-second
```

The preview mode can be programally enable/disable by this method:

```
pi.setPreviewMode(boolean enable)
```

It's also possible to set the preview mode from the initialization of the Pulse Insights library:

```
ExtraConfig piConfig = new ExtraConfig();
piConfig.previewMode = true;
PulseInsights pi = new PulseInsights(Context context, String accountId, ExtraConfig piConfig);
```

> You can check [this article](broken://pages/hn0JSmnhTdBLPfpyMBA3) for learn more about the `ExtraConfig` class.

In order to check the status of preview mode, use this method:

```
boolean isPreviewModeOn = pi.isPreviewModeOn()
```

#### 9. Callbacks

If you want to know if a survey has been answered by the current device, this method can be used:

```
boolean answered = pi.checkSurveyAnswered(String surveyId);
```

It's also possible to configure a callback to be executed when a survey has been answered:

```
pi.setAnswerListener(new SurveyAnsweredListener() {
    @Override
    public void onAnswered(String answerId) {

    }
});
```

#### 10. Context data

You can save context data along with the survey results, or for a refined survey targeting, using the `customData` config attribute, for example:

```
ExtraConfig piConfig = new ExtraConfig();
piConfig.customData = new HashMap<String, String>();
piConfig.customData.put("gender", "male");
piConfig.customData.put("age", "32");
piConfig.customData.put("locale", "en-US");
PulseInsights pi = new PulseInsights(Context context, String accountId, ExtraConfig piConfig);
```

You can also use `pi.clearContextData()` to clear all data you added before.

> You can check [this article](broken://pages/hn0JSmnhTdBLPfpyMBA3) for learn more about the `ExtraConfig` class.

#### 11. Device data

If you want to set device data, which will be saved along the survey results, the method `setDeviceData` can be used as follows:

```
pi.setDeviceData(Map<String, String> map);
```

`setDeviceData` can be called at any time, it will trigger a separate network request to save the data.

#### 12. Advanced

The default host is "survey.pulseinsights.com". If you want to target the staging environment, or any other environment, it's possible to override the default host:

```
pi.setHost(String surveyID);
```

The debug mode can be turned on and off:

```
pi.setDebugMode(boolean enable);
```

PulseInsights creates a unique UDID to track a given device. If you wish to reset this UDID, you can call the following method:

```
pi.resetUdid();
```

If you want manually config the context, you can call the following method:

```
pi.setContext(Context context)
```

And get the context object which been configured

```
Context context = pi.getContext()
```

#### 13. Others

**1. ExtraConfig**

The ExtraConfig is the class which you can apply the additioanl configuration from the initialization of the Pulse Insights library:

```
ExtraConfig piConfig = new ExtraConfig();
piConfig.automaticStart = false;
PulseInsights pi = new PulseInsights(Context context, String accountId, ExtraConfig piConfig);
```

You can apply the additional config with the following sub variables:

| Name           | function                                                | Default         | Usage                                                                                                                                                  |
| -------------- | ------------------------------------------------------- | --------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------ |
| automaticStart | [Survey rendering](broken://pages/hn0JSmnhTdBLPfpyMBA3) | true            | <p>true - survey rendering will automatically started from the initialization<br>false - survey rendering will not started from the initialization</p> |
| previewMode    | [Preview mode](broken://pages/hn0JSmnhTdBLPfpyMBA3)     | false           | <p>ture - turn the peview mode on<br>false - turn the preview mode off</p>                                                                             |
| customData     | [Context data](broken://pages/hn0JSmnhTdBLPfpyMBA3)     | new HashMap<>() | Save data along with survey results                                                                                                                    |

## Uninstall

1. Remove whatever you added when you went through the install flow
2. Sync or rebuild your project


# Android Demo App

### Sample Application for **Pulse Insights SDK** Integration

### Overview

This sample Android application demonstrates the integration of the **Pulse Insights SDK**. It includes utility classes for simplified SDK configuration, view mapping, and runtime behavior. The application sets up lifecycle callbacks to dynamically manage SDK functionality and trigger surveys based on configurable rules.

***

### Features

* **Pulse Insights SDK** initialization via Maven dependency.
* Configurable view mapping for analytics and survey triggers.
* Lifecycle management for activities and fragments.
* Survey frequency control with debouncing.

***

### Prerequisites

* **Android Studio** version \[X.X] or later.
* Minimum Android SDK level \[XX].
* An Account key for **Pulse Insights SDK**.

***

### Setup Instructions

#### 1. Add Pulse Insights SDK to Your Project

1. Open your app's `settings.gradle.kts` file and add the **Pulse Insights SDK** dependency from the Maven repository:

   ```
   dependencyResolutionManagement {
    repositoriesMode.set(RepositoriesMode.PREFER_SETTINGS)
        repositories {
            google()
            mavenCentral()
            maven { setUrl ("https://pi-sdk.s3.us-east-1.amazonaws.com/android") }
        }
    }
   ```

   Alternatively the dependency may be defined in the application or project build.gradle

   In this sample application, the maven repository is resolved in settings.gradle.kts
2. declare dependency in build.gradle.kts

```
    dependencies {
    
    implementation("com.pulseinsights:android-sdk:2.4.2")
    implementation("com.google.code.gson:gson:2.11.0")  // implement gson
    
    }
```

3. Add the following elements to AndroidManifest.xml Permissions for sensors

   ```
       <uses-permission android:name="android.permission.HIGH_SAMPLING_RATE_SENSORS" />
   ```

   If targeting Android api version 28 and above the following is required to load our httpcore

   ```
   <uses-library
           android:name="org.apache.http.legacy"
           android:required="false" /> 
   ```

***

#### 3. Add Your Account Identifier

Replace `account_id` with your Pulse Insights Account ID in the `MyApp.kt` file:

```
    //example custom data object and config on init
val config = ExtraConfig().apply {
    automaticStart = false
    customData = mapOf(
        "name" to "tester",
        "type" to "worker",
        "age" to "12"
    )
}
PulseInsightsManager.initialize(this, "account_id", config)
```

***

#### 4. Configure View Mappings

Add your custom view mappings in `res/raw/view_mappings.json`:

```
{
  "viewMappings": [
    {
      "className": "MainActivity",
      "analyticsName": "Main",
      "surveyConfig": { "enabled": true, "frequency": 1 }
    },
    {
      "className": "DashboardFragment",
      "analyticsName": "Main.Dashboard",
      "surveyConfig": { "enabled": true, "frequency": 0 }
    }
  ]
}
```

***

#### 5. Build and Run the Application

1. Open the project in **Android Studio**.
2. Connect your device or start an emulator.
3. Build and run the project to explore the integrated Pulse Insights features.

***

### Project Structure

#### 1. `MyApp.kt`

* Initializes the **Pulse Insights SDK** with an Account key and custom configurations.
* Registers lifecycle callbacks for activity and fragment tracking.
* Loads view mappings during application startup.

#### 2. `PulseInsightsLifecycleCallback.kt`

* Handles activity and fragment lifecycle events to set context and trigger surveys dynamically.
* Ensures surveys are debounced to prevent frequent triggers.

#### 3. `ViewMappingManager.kt`

* Manages view mappings for activities and fragments.
* Loads mappings from a JSON configuration file or defaults.
* Retrieves configuration details like survey rules and analytics names.

#### 4. `PulseInsightsManager.kt`

* Encapsulates SDK initialization and interaction logic.
* The PulseInsights SDK API is directly accessible from the PulseInsights Instance, The manager provides a potential implementation for more concise management of survey concepts
* Provides methods to set context and trigger surveys programmatically.

#### 5. `ViewConfig.kt`

* Defines the structure for view configurations, including:
  * `analyticsName`: Analytics identifier for the view.
  * `shouldTriggerSurvey`: Whether the survey should trigger for this view.
  * `surveyFrequency`: Frequency of survey triggers.


# iOS

Pulse Insights iOS SDK(SPM)

## Release Notes

To see the latest release notes, please visit our [GitHub](https://github.com/Pulse-Insights/pi-ios-spm/releases).&#x20;

## Installation

To install Pulse Insights in your application, follow these steps:

#### Using Swift Package Manager

1. Open your project in Xcode:

* Go to `File` > `Swift Packages` > `Add Package Dependency...`

2. Enter the repository URL:

* Paste the following URL: [https://github.com/Pulse-Insights/pi-ios-spm](broken://pages/sxLNUN5Txv0ogaL5jLzE)

3. Choose the version:

* Select the version you want to install. We recommend using the latest release for the most up-to-date features and bug fixes.

4. Add the package:

* Xcode will automatically resolve the package and add it to your project.

#### Manual Installation

1. Clone the repository:

* Run the following command in your terminal:

```
git clone https://github.com/Pulse-Insights/pi-ios-spm.git
```

2. Add the source files to your project:

* Drag and drop the PulseInsights folder into your Xcode project.

3. Link necessary frameworks:

* Ensure that your project links the required frameworks such as UIKit and CoreMotion.

## Upgrading

#### Using Swift Package Manager

1. Open your project in Xcode:

* Go to `File` > `Swift Packages` > `Update to Latest Package Versions`.

2. Select the Pulse Insights package:

* Xcode will check for the latest version and update it automatically.

#### Manual Upgrade

1. Pull the latest changes:

* Navigate to the cloned repository directory and run:

```
git pull origin main
```

2. Replace the old files:

* Replace the existing `PulseInsights` folder in your project with the updated one from the repository.

3. Rebuild your project:

* Clean and build your project to ensure all changes are applied.

## Demo app

You can try with <https://github.com/Pulse-Insights/pi-iOS-example-app> to have a better view!

## Usage

#### 1. Initialization

First, configure the shared PulseInsights object inside AppDelegate. You’ll do the following:

* Include the necessary headers.
* Setup the PulseInsights object inside didFinishLaunchingWithOptions.
* Replace YOUR\_ACCOUNT\_ID with your own PulseInsights ID, for example PI-12345678.

First add PulseInsights inside `AppDelegate`:

```
import PulseInsights
```

Then, override the `didFinishLaunchingWithOptions` method:

```
// Optional: set enableDebugMode to true for debug information.

let pi:PulseInsights = PulseInsights(YOUR_ACCOUNT_ID, enableDebugMode:[Bool value])
```

#### 2. View tracking

PulseInsights allows targeting surveys to a given screen name. In order for the SDK to know the current screen name, you can use the following method to notify it of the current screen name change:

```
PulseInsights.getInstance.setViewName(viewName:String,
controller:UIViewController)
```

For example, you can override the viewDidAppear function on the UIViewController subclass:

```
override func viewDidAppear(animated: Bool) {
    super.viewDidAppear(animated)
    PulseInsights.getInstance.setViewName("MainView", controller: self)
}
```

#### 3. Survey polling

The PulseInsights SDK will automatically regularly fetch surveys that would match various targeting conditions, based on a frequency that you can override as shown below:

```
PulseInsights.getInstance.setScanFrequency(setFrequencyInSecond :NSInteger)
```

If you want to manually fetch new surveys, you can also use this method:

```
PulseInsights.getInstance.serve()
```

#### 4. Render a specific survey

It's also possible to manually trigger a survey by its id:

```
PulseInsights.getInstance.present(surveyID:String)
```

#### 5. Inline surveys

Inline surveys are rendered within the content of the application, instead of overlaying the application content.

In order to integrate inline surveys, you can programmatically create the `InlineSurveyView` object by assigning an identifier and inserting it into a view:

```
var inlineSurveyView:InlineSurveyView?

inlineSurveyView = InlineSurveyView(identifier: String)

self.view.addSubview(inlineSurveyView)
```

If you integrate `InlineSurveyView` with the nib/xib, you can assign the tracking identifier by using the method `setIdentifier`

```
override func viewDidLoad() {
    super.viewDidLoad()
    inlineSurveyView?.setIdentifier(className: String) // assume the inlineSurveyView have been initialized
}
```

Here's another example of assigning the identifier for the inline view from xib

```
@IBOutlet weak var inlineXibView: InlineSurveyView! {
    didSet {  
        inlineXibView?.setIdentifier("InlineXib")
    }
}
```

If you prefer, setup the identifier with the nib layout, as the following screenshot shows. You can find the `Identifier` attribute from the Xcode interface

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

#### 6. Survey rendering

You can pause and resume the survey rendering feature with the following method:

```
PulseInsights.getInstance.switchSurveyScan(boolean enable);
```

And check the current configuration with the following method:

* true: survey rendering feature is enabled
* false: survey rendering feature is paused

```
var renderingConfig: Bool = PulseInsights.getInstance.isSurveyScanWorking();
```

It's also possible to pause the survey rendering from the initialization of the Pulse Insights library:

```
let pi:PulseInsights = PulseInsights(YOUR_ACCOUNT_ID, automaticStart: ${Bool value})
```

#### 7. Client Key

Client key can be setup using this method:

```
PulseInsights.getInstance.setClientKey(_ clientId: String )
```

The configured client key can be fetched with this method:

```
let getKey: String = PulseInsights.getInstance.getClientKey()
```

#### 8. Preview mode

Preview mode can be enabled/disabled by:

```
Shaking the device more than 10-times in 3-seconds
```

Preview mode can be programmatically enabled/disabled by this method:

```
PulseInsights.getInstance.setPreviewMode(_ enable: Bool)
```

It's also possible to set preview mode from the initialization of the Pulse Insights library:

```
let pi:PulseInsights = PulseInsights(_ accountID:String, enableDebugMode:Bool = false, previewMode:Bool = false)
```

In order to check the status of preview mode, use this method:

```
let isPreviewModeOn: Bool = PulseInsights.getInstance.isPreviewModeOn()
```

#### 9. Callbacks

If you want to know if a survey has been answered by the current device, this method can be used:

```
let isSurveyAnswered: Bool = PulseInsights.getInstance.checkSurveyAnswered(_ surveyId: String )
```

It's also possible to configure a callback to be executed when a survey has been answered:

```
class ViewController: UIViewController {
    override func viewDidLoad() {
      super.viewDidLoad()
      PulseInsights.getInstance.setSurveyAnsweredListener(self)
    }

}
extension ViewController: SurveyAnsweredListener {
    func onAnswered(_ answerId: String) {

    }
}
```

#### 10. Context data

You can save context data along with the survey results, or for a refined survey targeting, using the `customData` config attribute, for example:

```
let pi:PulseInsights = PulseInsights(YOUR_ACCOUNT_ID, customData: ["gender": "male", "age": "32", "locale": "en-US"])
```

You can also use method `setContextData` to add or update these data as follows:

```
PulseInsights.getInstance.setContextData(["author": "Ann Smith", "variant": "a"])
```

You can also use method `clearContextData()` to cleal all data you set before.

If using Context Data for targeting, it should be defined before `PulseInsights.getInstance.serve()`, since that line triggers the evaluation for whether to return a survey on the current pageview.

#### 11. Device data

If you want to set device data, which will be saved along the survey results, the method `setDeviceData` can be used as follows:

```
PulseInsights.getInstance.setDeviceData(dictData:[String: String]())
```

`setDeviceData` can be called at any time. It will trigger a separate network request to save the data.

#### 12. Advanced usage

The default host is "survey.pulseinsights.com". If you want to target the staging environment, or any other environment, it's possible to override the default host:

```
PulseInsights.getInstance.setHost(hostName:String)
```

The debug mode can be turned on and off:

```
PulseInsights.getInstance.setDebugMode(enable:Bool)
```

PulseInsights creates a unique UDID to track a given device. If you wish to reset this UDID, you can call the following method:

```
PulseInsights.getInstance.resetUdid()
```

If you want manually config the view controller, you can call the following method:

```
PulseInsights.getInstance.setViewController(ontroller: UIViewController)
```

And get the view controller object that has been configured.

```
let viewController: UIViewController = PulseInsights.getInstance.getViewController()
```

## Uninstall

#### Using Swift Package Manager

1. Open your project in Xcode:

Go to `File` > `Swift Packages` > `Manage Packages...`

2. Remove the package:

Select the Pulse Insights package and click the - button to remove it.

3. Clean your project:

Go to `Product` > `Clean Build Folder` to remove any cached data.

#### Manual Uninstallation

1. Remove the source files:

Delete the `PulseInsights` folder from your Xcode project.

2. Unlink frameworks:

Go to your project settings and remove any linked frameworks that were added for Pulse Insights.

3. Clean your project:

Go to `Product` > `Clean Build Folder` to ensure all references are removed.


# iOS Demo App

### Pulse Insights iOS SDK Demo app

This demo application showcases the integration and usage of the [PulseInsights SDK](https://github.com/Pulse-Insights/pi-ios-spm) for iOS. It demonstrates various features including survey triggering, context data management, and client key configuration.

### Getting Started

#### Prerequisites

Xcode 14.0+ iOS 13.0+ Swift 5.0+

#### Installation

1. Clone this repository
2. Open the project in Xcode
3. Build and run the application on your device or simulator

### Usage

#### Step 1: Obtain an Account ID

First, you need to obtain an Account ID from the Pulse Insights Console:

1. Log in to your Pulse Insights Console
2. Navigate to Account Settings
3. Copy your Account ID

#### Step 2: Initialize the SDK

In `AppDelegate.swift`, initialize the PulseInsights SDK with your Account ID:

```
import UIKit
import PulseInsights

@UIApplicationMain
class AppDelegate: UIResponder, UIApplicationDelegate {

    var window: UIWindow?
    var pulseInsights: PulseInsights?

    func application(_ application: UIApplication,
                     didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
        
        // Initialize PulseInsights with your Account ID
        let accountId = "YOUR_ACCOUNT_ID"
        pulseInsights = PulseInsights(accountId, enableDebugMode: true)
        
        // Optional: Set custom host if needed
        // pulseInsights?.setHost("survey.pulseinsights.com")
        
        // Optional: Set custom data
        let customData = ["user_type": "tester", "platform": "iOS"]
        pulseInsights?.setContextData(customData)
        
        return true
    }
}
```

#### Step 3: Trigger Surveys

To trigger surveys in your application:

```
// In your view controller
import PulseInsights

class YourViewController: UIViewController {
    
    override func viewDidLoad() {
        super.viewDidLoad()
        
        // Set the view name for targeting
        PulseInsights.getInstance.setViewName("mainView", controller: self)
    }
    
    override func viewWillAppear(_ animated: Bool) {
        super.viewWillAppear(animated)
        
        // Serve the survey
        PulseInsights.getInstance.serve()
    }
}
```

#### Step 4: Set Client Key (Optional)

If you need to set a client key for specific surveys:

```
// Set the client key
PulseInsights.getInstance.setClientKey("YOUR_CLIENT_KEY")
```

#### Step 5: Manage Context Data (Optional)

You can add context data to provide additional information for survey targeting:

```
// Add context data
let contextData = ["user_id": "12345", "subscription_level": "premium"]
PulseInsights.getInstance.setContextData(contextData)

// Clear context data
PulseInsights.getInstance.clearContextData()
```

### Features Demonstrated in the App

* Survey triggering in different views
* Inline surveys
* Context data management
* Client key configuration
* Survey response checking
* Device ID reset

### Documentation

For more detailed information about the PulseInsights SDK, please refer to the [official documentation](https://github.com/Pulse-Insights/pi-ios-spm).

### License

This project is licensed under the MIT License - see the LICENSE file for details.


# iOS (old)

## Installation

#### Binary vs. Source Code&#x20;

To install Pulse Insights in your application, follow these steps:

1. Add the following line in `Podfile`

```
pod 'PulseInsights'
```

2. Execute the cmd `pod install` to download and set up the SDK
3. Find the generated `.xcworkspace` and open it in Xcode

## Upgrading

To upgrade the library, simply overwrite the .framework package with the newer version.

## Usage

### 1. Initialization

First, configure the shared PulseInsights object inside AppDelegate. You’ll do the following:

* Include the necessary headers.
* Setup the PulseInsights object inside didFinishLaunchingWithOptions.
* Replace YOUR\_ACCOUNT\_ID with your own PulseInsights ID, for example PI-12345678.

First add PulseInsights inside `AppDelegate`:

```
import PulseInsights
```

Then, override the `didFinishLaunchingWithOptions` method:

```
// Optional: set enableDebugMode to true for debug information.

let pi:PulseInsights = PulseInsights(YOUR_ACCOUNT_ID, enableDebugMode:[Bool value])
```

### 2. View tracking <a href="#user-content-2-view-tracking" id="user-content-2-view-tracking"></a>

Pulse Insights allows targeting surveys to a given screen name. In order for the SDK to know the current screen name, you can use the following method to notify it of the current screen name change:

```
PulseInsights.getInstance.setViewName(viewName:String,
controller:UIViewController)
```

For example, you can override the viewDidAppear function on the UIViewController subclass:

```
override func viewDidAppear(animated: Bool) {
    super.viewDidAppear(animated)
    PulseInsights.getInstance.setViewName("MainView", controller: self)
}
```

### 3. Survey polling <a href="#user-content-3-survey-polling" id="user-content-3-survey-polling"></a>

The Pulse Insights SDK will automatically regularly fetch surveys that would match various targeting conditions, based on a frequency that you can override as shown below:

```
PulseInsights.getInstance.setScanFrequency(setFrequencyInSecond :NSInteger)
```

If you want to manually fetch new surveys, you can also use this method:

```
PulseInsights.getInstance.serve()
```

### 4. Render a specific survey <a href="#user-content-4-render-a-specific-survey" id="user-content-4-render-a-specific-survey"></a>

It is also possible to manually trigger a survey by its id:

```
PulseInsights.getInstance.present(surveyID:String)
```

### 5. Inline surveys <a href="#user-content-5-inline-surveys" id="user-content-5-inline-surveys"></a>

Inline surveys are rendered within the content of the application, instead of overlaying the application content.

In order to integrate inline surveys, you can programmatically create the `InlineSurveyView` object by assigning an identifier and inserting it into a view:

```
var inlineSurveyView:InlineSurveyView?

inlineSurveyView = InlineSurveyView(identifier: String)

self.view.addSubview(inlineSurveyView)
```

If you integrate `InlineSurveyView` with the nib/xib, you can assign the tracking identifier by using the method `setIdentifier`

```
override func viewDidLoad() {
        super.viewDidLoad()
        inlineSurveyView?.setIdentifier(className: String) // assume the inlineSurveyView have been initialized
}
```

Here's another example of assigning the identifier for the inline view from xib

```
@IBOutlet weak var inlineXibView: InlineSurveyView! {
        didSet {
            inlineXibView?.setIdentifier("InlineXib")
        }
    }
```

If you prefer, set up the identifier with the nib layout, as the following screenshot shows. You can find the `Identifier` attribute from the Xcode interface

![](/files/ioCzLxBkAR0lFgPkPKKl)

### 6. Survey rendering

You can pause and resume the survey rendering feature with the following method:

```
PulseInsights.getInstance.switchSurveyScan(boolean enable);
```

And check the current configuration with the following method:

* true: survey rendering feature is enabled
* false: survey rendering feature is paused

```
var renderingConfig: Bool = PulseInsights.getInstance.isSurveyScanWorking();
```

It is also possible to pause the survey rendering from the initialization of the Pulse Insights library as follows:

```
let pi:PulseInsights = PulseInsights(YOUR_ACCOUNT_ID, automaticStart: ${Bool value})
```

### 7. Client Key <a href="#user-content-7-client-key" id="user-content-7-client-key"></a>

Client key can be set using this method:

```
PulseInsights.getInstance.setClientKey(_ clientId: String )
```

The configured client key can be fetched with this method:

```
let getKey: String = PulseInsights.getInstance.getClientKey()
```

### 8. Preview mode <a href="#user-content-8-preview-mode" id="user-content-8-preview-mode"></a>

Preview mode can be enabled/disabled by:

```
Shaking the device more than 10-times in 3-seconds
```

Preview mode can be programmatically enabled or disabled by this method:

```
PulseInsights.getInstance.setPreviewMode(_ enable: Bool)
```

It is also possible to set preview mode from the initialization of the Pulse Insights library:

```
let pi:PulseInsights = PulseInsights(_ accountID:String, enableDebugMode:Bool = false, previewMode:Bool = false)
```

In order to check the status of the preview mode, use this method:

```
let isPreviewModeOn: Bool = PulseInsights.getInstance.isPreviewModeOn()
```

### 9. Callbacks <a href="#user-content-9-callbacks" id="user-content-9-callbacks"></a>

If you want to know if a survey has been answered by the current device, this method can be used:

```
let isSurveyAnswered: Bool = PulseInsights.getInstance.checkSurveyAnswered(_ surveyId: String )
```

It is also possible to configure a callback to be executed when a survey has been answered:

```
class ViewController: UIViewController {
    override func viewDidLoad() {
      super.viewDidLoad()
      PulseInsights.getInstance.setSurveyAnsweredListener(self)
    }

}
extension ViewController: SurveyAnsweredListener {
    func onAnswered(_ answerId: String) {

    }
}
```

### 10. Context data <a href="#user-content-10-context-data" id="user-content-10-context-data"></a>

You can save context data along with the survey results, or for a refined survey targeting, using the `customData` config attribute. For example:

```
let pi:PulseInsights = PulseInsights(YOUR_ACCOUNT_ID, customData: ["gender": "male", "age": "32", "locale": "en-US"])
```

### 11. Device data <a href="#user-content-11-device-data" id="user-content-11-device-data"></a>

If you want to set device data, which will be saved along the survey results, the method `setDeviceData` can be used as follows:

```
PulseInsights.getInstance.setDeviceData(dictData:[String: String]())
```

`setDeviceData` can be called at any time. It will trigger a separate network request to save the data.

### 12. Advanced usage <a href="#user-content-12-advanced-usage" id="user-content-12-advanced-usage"></a>

The default host is "survey.pulseinsights.com". If you want to target the staging environment, or any other environment, it is possible to override the default host:

```
PulseInsights.getInstance.setHost(hostName:String)
```

The debug mode can be turned on and off:

```
PulseInsights.getInstance.setDebugMode(enable:Bool)
```

PulseInsights creates a unique UDID to track a given device. If you wish to reset this UDID, you can call the following method:

```
PulseInsights.getInstance.resetUdid()
```

If you want manually config the view controller, you can call the following method:

```
PulseInsights.getInstance.setViewController(ontroller: UIViewController)
```

And get the view controller object that has been configured.

```
let viewController: UIViewController = PulseInsights.getInstance.getViewController()
```

## Themes <a href="#user-content-uninstall" id="user-content-uninstall"></a>

You can configure approximately 50 properties - such as font color and size - using SDK Themes in the Console:&#x20;

Styling is not driven by CSS but uses native components and formatting instead.

To create a mobile app-compatible theme in the Pulse Insights Console:&#x20;

1. Click the Settings dropdown menu from the top navigation bar
2. Select "Themes"

<figure><img src="/files/EW1DzI1J9aOtPjQ399Wv" alt="" width="164"><figcaption></figcaption></figure>

3. Click the "New Theme" button
4. Give a name to your theme
5. In the "Type" dropdown menu, select "Native"
6. Input your Native JSON theme into the code box
7. "Update"

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

### Uninstall

1. Remove the following statement from your `Podfile`

```
pod 'PulseInsights'
```

2. Execute `pod install` , so the SDK will be removed


# React Native

## Implementing Pulse Insights in React Native

This documentation provides guidance for integrating Pulse Insights surveys into a React Native app. It includes general integration instructions, platform-specific guidance (iOS and Android), and setup for the React Native example/demo app.

***

## Overview

Pulse Insights offers a React Native SDK that bridges to our existing iOS and Android native SDKs. This allows you to easily embed surveys in your React Native app while benefiting from the full functionality of our native libraries.

Our SDK supports displaying surveys, collecting user input, and applying targeting and theming configurations. All surveys are rendered natively on each platform for optimal performance and user experience.

***

## React Native SDK Installation

For full installation instructions, refer to the[ SDK README on GitHub](https://github.com/Pulse-Insights/pi-react-native/blob/main/README.md).

To integrate the Pulse Insights SDK into your own React Native application:

#### 1. Install the Package

```
yarn add pulse-insight-react-native
```

or

```
npm install pulse-insight-react-native
```

***

## Native Project Configuration

Refer to the[ PulseInsight README](https://github.com/Pulse-Insights/pi-react-native/blob/main/PulseInsight/README.md) for complete platform-specific configuration.

### iOS:

* Navigate to the `ios` directory and install CocoaPods:

```
cd ios
pod install
cd ..
```

* Ensure the Pulse Insights host is set, otherwise surveys will not display.

### Android:

* Java 17 is required. We recommend using `jenv` or another Java version manager.
* Add the following to your root `build.gradle` file:

```
allprojects {
    repositories {
        maven {
            url "https://maven.pkg.github.com/Pulse-Insights/pi-android-sdk"
            credentials {
                username = GITHUB_USER_ID
                password = GITHUB_PERSONAL_ACCESS_TOKEN
            }
        }
    }
}
```

* Add `mavenCentral()`to your `settings.gradle`:

```
dependencyResolutionManagement {
    repositoriesMode.set(RepositoriesMode.FAIL_ON_PROJECT_REPOS)
    repositories {
        google()
        mavenCentral()
    }
}
```

* Update your app-level `build.gradle` to enable Java 17:

```
android {
    compileOptions {
        sourceCompatibility JavaVersion.VERSION_17
        targetCompatibility JavaVersion.VERSION_17
    }
}
```

{% hint style="info" %}
If you run into build errors, ensure your `JAVA_HOME` is correctly set.
{% endhint %}

***

## Initialize the SDK in Your App

```
import { PulseInsights } from 'pulse-insight-react-native';

PulseInsights.getInstance().initialize("<account_id>");
```

***

## Optional Configuration (e.g. Environment Host)

To override the default production host (`survey.pulseinsights.com`), call:

```
PulseInsights.getInstance().setHost("<custom_host>");
```

***

## React Native Demo App

We provide a working example app to demonstrate how to use the SDK.

### Location

[PulseInsight/example/PIDemo](https://github.com/Pulse-Insights/pi-react-native/blob/main/PulseInsight/example/PIDemo/README.md)

### To Run the Demo

```
cd PulseInsight/example/PIDemo
yarn
cd ios && pod install && cd ..
yarn ios   # or yarn android
```

### Configuration

In `App.tsx`, update the following lines:

```
PulseInsights.getInstance().initialize("<account_id>");
PulseInsights.getInstance().setHost("<host_name>");
```

{% hint style="info" %}
By default, the host is `survey.pulseinsights.com`.
{% endhint %}

#### Notes

* You can test widget styles, theming, question routing, and targeting.

***

## Theme Support

Pulse Insights supports extensive theme customization using JSON theme objects.

* Note: Some theme properties differ across platforms (iOS, Android, React Native).

***

## Known Limitations

* Some styling behavior (e.g. padding, font rendering) differs slightly between Android and iOS.
* Not all question types are currently supported (e.g. slider, HTML in custom content).
* React Native SDK uses the native SDK at runtime. Platform-level inconsistencies may apply.

***

### Troubleshooting

* If the SDK fails to display surveys:
  * Confirm that `initialize()` has been called.
  * Verify that the hostname is valid and set.
  * Use Xcode or Android Studio logs for debugging native-level errors.
* If `yarn android` fails due to `JAVA_HOME`:
  * Ensure your Java 17 installation is valid.
  * Use `jenv` or manually configure your environment.

{% hint style="info" %}
For more help, contact <support@pulseinsights.com> or your account representative.
{% endhint %}

<br>


# Demo App Help

Help with configuring your survey to test in the Pulse Insights demo app.

## Overview

[Getting Started](#getting-started)

[Triggering an Inline Survey](#trigger-an-inline-survey)

[Trigging other Widget Types](#trigger-a-survey-non-inline)

[Checking if Survey has been Answered](#check-if-answered)

[Resetting Device UDID](#reset-device-udid)

[Console Setup Help](#console-setup-help)

## Getting Started

Download the Pulse Insights Demo app for:

* Android
* iOS

<figure><img src="/files/6dFHhJnUsUxL62vIEU8O" alt="" width="188"><figcaption></figcaption></figure>

On the Setup screen, type in you Pulse Account ID and click the "Save Settings" button.&#x20;

{% hint style="info" %}
Account ID can be found in the Pulse Insights Console, or in your tag integration guide.\
\
The Account ID starts with "PI-" and is followed by 8 numbers. *(E.g. PI-99999999)*
{% endhint %}

Once you are setup with your Account ID, you will be taken to the Home screen. From here you can:

* Trigger a Survey
* Check if a specific survey has been answered on your current device
* Reset Device UDID to enable an to trigger an answered survey again

<figure><img src="/files/STZov5WzpfOhnizUcUQN" alt="" width="188"><figcaption></figcaption></figure>

## Trigger an Inline Survey

1. On the Home page, Click "Trigger a Survey"
2. You will be asked If your survey is an Inline widget. For Inline widget surveys, click "Yes"

<figure><img src="/files/f2YyIDPzeFgsTKD5sUbr" alt="" width="188"><figcaption></figcaption></figure>

3. (Optional) Set a client key if your survey has "Display only if client\_key is displayed" targeting enabled - see [Targeting](#targeting-setup) for more details:&#x20;
   1. Scroll down to the "Set a Client Key (Optional)" section of the page
   2. Enter a value in the input box
   3. Hit "Save"
   4. To clear the client key, hit "Clear"

<figure><img src="/files/ApyyOrNp9zu1gLTtJ4zd" alt="" width="349"><figcaption></figcaption></figure>

4. Click the Trigger button that matches the View Name that the survey is targeted to (this is set in the Pulse Insights Console).&#x20;
   * Make sure to match the View Name targeting and Inline SDK target formatting in the Pulse Insights Console to the Trigger you select.&#x20;
   * Please refer to the chart below for View Name & Inline Selector information and check out the [Console Setup Help](#console-setup-help) section below: &#x20;

| Device  | View Name          | Inline Selector Name |
| ------- | ------------------ | -------------------- |
| Android | inlineTestActivity | InlineTestActivity   |
| iOS     | inlineXibView      | InlineXib            |
| iOS     | inlineTest         | Inline Scroll        |

5. You will be taken to the demo screen and your survey will display inline with the content of the screen.&#x20;
6. If you answer the survey, return home and follow the process of resetting your device UDID to enable the survey to show again on your device. &#x20;

## Trigger a Survey (non-inline)

1. On the Home page, Click "Trigger a Survey"
2. You will be asked If your survey is an Inline widget. For non-inline widget types, click "No"
3. (Optional) Set a client key if your survey has "Display only if client\_key is displayed" targeting enabled - see [Targeting](#targeting-setup) for more details:&#x20;

   1. Scroll down to the "Set a Client Key (Optional)" section of the page
   2. Enter a value in the input box
   3. Hit "Save"
   4. To clear the client key, hit "Clear"

   <figure><img src="/files/QrbLJG3LY4qUjfVwd0Wx" alt="" width="349"><figcaption></figcaption></figure>
4. Click one of the Trigger buttons that matches the View Name that the survey is targeted to (this is set in the Pulse Insights Console). If, the survey's View Name targeting is set to:
   * &#x20;`mainActivity`, then click the first "Trigger Survey" button and the survey will display on the current screen.&#x20;
   * `subActivityA`, then click the second "Trigger Survey" button. You will be taken to the corresponding demo screen and your survey will display.
   * `subActivityB`, then click the third "Trigger Survey" button. You will be taken to the corresponding demo screen and your survey will display.

{% hint style="info" %}
Please refer to the chart below for View Names and check out the [Targeting Setup](#targeting-setup) section below.
{% endhint %}

5. If you answer the survey, return home and follow the process of resetting your device UDID to enable the survey to show again on your device. &#x20;

## Check if Answered

You can check to see if a particular survey was answered on the current device. To check:

1. From the Home Screen, click "Check if Answered/Reset Device UDID"
2. Enter the survey's ID in the input box&#x20;
3. Click "Check if Answered"&#x20;
4. A message will display:

   * If the survey has not been answered, you can proceed to follow the steps to trigger the survey.&#x20;
   * If the survey *has* already been answered, then it may be ineligible to show on the device again. Follow the steps to [Reset Device UDID](#reset-device-udid) below.&#x20;

   <figure><img src="/files/zyV3xzxEyuyv6Hzry4qg" alt="" width="375"><figcaption></figcaption></figure>

## Reset Device UDID

If the survey has already been answered, click the "Reset Device UDID" button to make the survey eligible to show again on this device.

1. From the Home Screen, click "Check if Answered/Reset Device UDID"
2. Click the "Reset Device UDID" button

<figure><img src="/files/o8JqI6OfFm33J3K96tOS" alt="" width="375"><figcaption></figcaption></figure>

## Console Setup Help

Navigate to the survey editor, then click the "Targeting" panel in the right sidebar.&#x20;

### Targeting Setup

#### Devices & Channels:&#x20;

In the Targeting panel in the right sidebar, select the iOS and/or Android icons in the "Devices & Channels" section.

<figure><img src="/files/csB6fgXMxx4ceNwKWUB8" alt="" width="375"><figcaption></figcaption></figure>

#### View Name

In the "URLs & Events" targeting section, there are two rules you can choose for display if/suppress if rules:&#x20;

1. View Name Contains
2. Regex View Name Matches

Please refer to this chart for Demo app View Name targeting:

| Device             | Widget Type | View Name Contains |
| ------------------ | ----------- | ------------------ |
| Android            | Inline      | InlineTestActivity |
| iOS                | Inline      | inlineXibView      |
| iOS                | Inline      | inlineXibView      |
| Both Android & iOS | Non-Inline  | mainActivity       |
| Both Android & iOS | Non-Inline  | subActivityB       |
| Both Android & iOS | Non-Inline  | subActivityA       |

#### Client Key

If you'd like to only target devices where the the client\_key is set, then check the box next to "Display only if client\_key is defined" in the "CRM Targeting" targeting section.&#x20;

<figure><img src="/files/TOawjf7XSCCf34QwSxHq" alt="" width="375"><figcaption></figcaption></figure>

See the instructions above on how to set the client key in the Demo App to test this targeting feature.&#x20;

### Formatting Setup

Navigate to the survey editor, then click the "Formatting" panel in the right sidebar.&#x20;

#### **Widget**

Native mobile supports fewer widget types and uses native mobile components (such as input fields). Currently, we support the following widget types for Native mobile:

* Full screen overlay
* Bottom Bar
* Inline (see additional setup required for Inline widget-type [below](#inline-target))&#x20;

Choose one of the supported widget types from the the Formatting panel in the right sidebar and set the SDK Widget Height:

<figure><img src="/files/bJzqmdHAUT2iPCcXNVsn" alt="" width="321"><figcaption></figcaption></figure>

#### **Inline Target**

If you choose the Inline widget-type, make sure to set the SDK target to the appropriate name for the desired device and view, choose the location within the target (above/inside/below), and, if inside, choose the order with the target (first/last).&#x20;

| Device  | View Name          | Inline SDK Target Name |
| ------- | ------------------ | ---------------------- |
| Android | InlineTestActivity | InlineTestActivity     |
| iOS     | inlineXibView      | InlineXib              |
| iOS     | inlineTest         | Inline Scroll          |

<figure><img src="/files/Jt57EPhXals8Ri6YqCOo" alt="" width="285"><figcaption></figcaption></figure>

#### Theme

In the Formatting panel in the right sidebar, scroll down to the "Theme" section.&#x20;

You must select a native JSON theme for the SDK theme. Select a compatible theme from the "SDK Theme" dropdown.

<figure><img src="/files/7fjhvAuVz73OdiD7IIXS" alt=""><figcaption></figcaption></figure>

To create a mobile app compatible theme in the Pulse Insights Console:&#x20;

1. Click the Settings dropdown menu from the top navigation bar
2. Select "Themes"

<figure><img src="/files/EW1DzI1J9aOtPjQ399Wv" alt="" width="164"><figcaption></figcaption></figure>

3. Click the "New Theme" button
4. Give a name to your theme
5. In the "Type" dropdown menu, select "Native"
6. Input your Native JSON theme into the code box
7. "Update"

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

{% hint style="info" %}
For more help with themes, visit our help section here.
{% endhint %}

####

####


# Integrations overview

Integrations are a core part of how Pulse Insights helps you extend the value of each response. They can help you:

* Link data that only exists in your enterprise back-end to uncover new insights
* Operationalize events like creating support tickets when certain feedback criteria are met
* Contextualize existing datasets by layering in what was inside users' heads to learn the "why" behind observed behavior
* Personalize future interactions by incorporating explicit user feedback and data into engine's decisions

## Our approach to integrations

Enterprises use the same software in different ways. This makes one-size-fits-all integrations difficult. Perhaps you need to transform the data before sending it, so that it can be immediately used by the other system. Perhaps you need to customize which data you send. Perhaps you need to customize where you want to send the data. Because of the realities of enterprise integrations, we've focused on making our integrations flexible to allow for minor customizations to fit your situation.

## Integrations process

Because we will be customizing the integration to meet your specific needs, we'll ask you for some inputs to help inform our configurations.&#x20;

### Destination & authentication details:

* CRM, CDP, or ESP (such as [Hubspot](/integrations/integrations-overview/hubspot), Salesforce, [Braze](/integrations/integrations-overview/braze))
* [Data Lake](/integrations/integrations-overview/data-lake) or other internal repository (e.g. S3 Bucket, SFTP)
* Web Analytics, A/B testing, session replay, or other tag-based integrations (e.g. [Google Analytics](/integrations/integrations-overview/google-analytics), Adobe Analytics, Optimizely, or ContentSquare)

### File specifications&#x20;

For file-based integrations:

* **Frequency**: What frequency would you like us to send the data? We can send data upon submission (in near-real time) or in batches in your desired frequency (e.g. daily sends, x times a day/week/month, etc.). We can also send historical data if your survey campaign has already started before the integration has been completed.&#x20;
* **File receiving schedule**: Desired time window when we should send the data.
* **File name**: Desired naming convention for files sent.&#x20;
* **Action when there is no activity**: e.g. Should a blank file be sent when there is 0 submissions for the time period?

### Data points to include

Which data points would you like to include? Our standard list of data points can be modified to fit your needs. See the section on [Contextual Data](/implementing-pulse-insights-dev/implementing-on-web-and-mobile-web/ingesting-contextual-data-for-targeting-and-analysis) for additional data types to consider passing to Pulse Insights for further analysis.&#x20;

| Data Point          | Format                        | Definition                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         |
| ------------------- | ----------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| Account Name        | Text                          | Account Name given by Pulse Insights for each initiative.                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          |
| Account ID          | Text                          | Unique account # identifier given by Pulse Insights for each initiative.                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                           |
| Date                | MM/DD/YYYY                    | Date of submission.                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                |
| Time                | HR:MM:SS (24 HR Format - UTC) | Time of submission                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 |
| Question            | Text                          | Question text that is displayed to the user.                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                       |
| Response            | Text                          | Text version of the user response.                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 |
| Tags                | Text                          | Relevant to Open-Ended responses, and manually created by users in Pulse Insights reporting page                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   |
| Survey ID           | Numeric                       | Sets of questions are grouped in each survey. This survey ID represents the survey.                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                |
| Question ID         | Numeric                       | ID representing each question that is being displayed.                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                             |
| Response ID         | Numeric                       | ID represents each user response.                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  |
| Next Question ID    | Numeric                       | If surveys have multiple questions, this represents next question that could be shown.                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                             |
| Pageview Count      | Numeric                       | Number of pages viewed by the user.                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                |
| Visit Count         | Numeric                       | Number of visits.                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  |
| Device Type         | Text                          | Device type that is assigned by Pulse Insights (e.g. desktop, mobile, tablet).                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                     |
| Device UDID         | Text                          | ID assigned to each user based on the device they used. This is assigned by Pulse Insights                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         |
| Client Key          | Text                          | A persistent, anonymous, and unique User ID that you assign to a user. The value is typically passed to Pulse Insights upon an authentication event and used to tie a response back to an individual or to tie multiple devices/browers together. See [Client Key](/implementing-pulse-insights-dev/implementing-on-web-and-mobile-web/client-key) for more details.                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                               |
| Completion URL      | Text                          | URL that the survey was taken on if web. Native mobile, API/email responses, and Dynamic Email responses don’t include this value.                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 |
| View Name           | Text                          | For native mobile/SDK-based responses, the View Name is the equivalent of a Page or Screen name in web-based apps. It is defined by the app developers and typically the same value that gets passed to SDK-based analytics packages as the Page Name.                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                             |
| Event               | Text                          | <p>Optional value that tells Pulse Insights what occurred to trigger a survey. It is captured via <code>pi('present', 'alias');</code><br><br>Please refer <a href="/pages/6AEki9arEr8txd7G6bPE#by-using-a-present-alias">here</a> for more details on presenting specific surveys. </p>                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                           |
| Context Data        | Text                          | Context Data is meant to provide additional details about the user’s current context that typically isn’t immediately observable from the page or screen itself. For example, the category of product the user is viewing or the variant of an A/B test that a user was sorted into. It is explicitly passed to Pulse Insights via JavaScript or API methods during implementation. See more details on context data [here](/implementing-pulse-insights-dev/implementing-on-web-and-mobile-web/ingesting-contextual-data-for-targeting-and-analysis).                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                             |
| Device Data         | Text                          | Device Data is meant to provide additional details about the device (which is often a proxy for the user) that persist across multiple pageviews and sessions. For example, a customer’s loyalty/membership tier, internal model segmentation value or score, or Persistent IDs from other services work well as device data. Device data is expected to change infrequently (since it describes the customer/device, not the current context). Device Data is explicitly passed to Pulse Insights via JavaScript or API methods during implementation.Device Data is meant to provide additional details about the device (which is often a proxy for the user) that persist across multiple pageviews and sessions. For example, a customer’s loyalty/membership tier, internal model segmentation value or score, or Persistent IDs from other services work well as device data. Device data is expected to change infrequently (since it describes the customer/device, not the current context). Device Data is explicitly passed to Pulse Insights via JavaScript or API methods during implementation. Please see the section on [device data](/implementing-pulse-insights-dev/implementing-on-web-and-mobile-web/ingesting-contextual-data-for-targeting-and-analysis) for more details. |
| Sentiment Score     | Decimal                       | The result of Google’s NLP API for open-ended/free text responses. Score ranges between -1.0 (negative) and 1.0 (positive) and corresponds to the overall emotional leaning of the text                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            |
| Sentiment Magnitude | Text                          | The result of Google’s NLP API for open-ended/free text responses. Magnitude indicates the overall strength of emotion (both positive and negative) within the given text, between 0.0 and +inf. Unlike score, magnitude is not normalized; each expression of emotion within the text (both positive and negative) contributes to the text's magnitude (so longer text blocks may have greater magnitudes).                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                       |
| Operating System    | Text                          | User device's operating system (e.g. iPhone; CPU iPhone OS 14\_7\_1 like Mac OS X).                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                |
| Browser             | Text                          | User device's browser (e.g. Chrome, iPhone Safari)                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 |
| Browser Version     | Text                          | User device's browser version                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      |
| Channel             | Text                          | <p>Mapped based on the type of response: Web/Browser, Mobile SDK, Direct Submission API/Link, or Dynamic Email. </p><p></p><p><em>Note that traditional email survey responses use Direct Submissions (Links), so appears in reporting as such while Dynamic Email utilities its own API to classify it as such.</em> </p>                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         |

### Timing

Once we have all of the connection details, file specifications (if applicable), desired data points, we will configure a "worker" to send the data as desired.&#x20;

Please note that we can batch send historical data, so you can set your survey live before the integration is complete without losing any data. Once the integration is complete, we will send all  data from survey launch date to when the automated worker began.&#x20;

### QA

We will jointly QA the integration to ensure data is flowing to spec before enabling it. We also have error monitoring for when integrations fail (e.g. if API Key changes) and will work with you to remediate.&#x20;

Please contact your Customer Success Manager to ask about the QA process, or to set up a live QA call.


# Quantum Metric

## Quantum Metric Integration

Pulse Insights supports a native integration with Quantum Metric that allows you to correlate survey responses with user session replays captured by Quantum Metric. This enables powerful UX and VOC (Voice of Customer) workflows by tying qualitative feedback to behavioral data.

### Use Cases

* **Session Replay Context**: Easily jump from a survey response to the full session replay.
* **Segmentation in Quantum Metric**: Tag sessions with survey attributes (e.g., sentiment or NPS) for deeper analysis.
* **Analytics & Reporting**: Enrich Pulse survey exports with Quantum Metric session data for unified insights.

### How It Works

The integration leverages Quantum Metric’s JavaScript API and Pulse Insights’ context\_data capabilities.

1. Quantum Metric exposes a session replay URL via JavaScript.
2. Pulse Insights captures that URL and attaches it to the survey response.
3. Optionally, survey answers can be passed back into Quantum Metric as custom session attributes.

### Implementation Steps

#### 1. Check for Quantum Metric Availability<br>

```
if (window.QuantumMetricAPI?.isOn()) {
  const qmReplay = QuantumMetricAPI.getReplay();
  const qmSession = QuantumMetricAPI.getSessionID();
  // Store or pass these values as needed
}
```

#### 2. Attach to Pulse Insights Context<br>

```
pi('set_context_data', {
  quantum_metric_replay_url: qmReplay,
  quantum_metric_session_id: qmSession
});
```

#### 3. Push Survey Answers into Quantum Metric (Optional)<br>

```
pi('onSurveySubmit', function(data) {
  const satisfaction = data.answers?.find(a => a.content === 'Very Satisfied');
  if (satisfaction && window.QuantumMetricAPI?.isOn()) {
    QuantumMetricAPI.setCustomAttribute('pulse_satisfaction', 'very_satisfied');
    QuantumMetricAPI.setCustomAttribute('pulse_replay_url', QuantumMetricAPI.getReplay());
  }
});
```

### Data Export & Analytics

Once the replay URL is captured via context\_data, it becomes available:

* In Pulse’s survey response exports
* Through Pulse’s API and data warehouse integrations
* In custom dashboards and reporting pipelines

### Requirements

* Quantum Metric must be deployed on the same page as the Pulse survey.
* The Quantum Metric JavaScript API (QuantumMetricAPI) must be available in the global namespace.

### Summary

With a lightweight integration, Pulse Insights can enrich both your feedback data and session replay analytics. This bi-directional setup gives you instant access to the “why” behind customer behavior.

{% hint style="info" %}
For implementation support, contact your Pulse Insights Customer Success Manager.
{% endhint %}


# Hubspot

## What the integration accomplishes

This integration enables you to take responses from Pulse Insights and insert them into the appropriate user's Hubspot record so you can personalize future marketing and servicing communications and experiences.

&#x20;For example you might:

* Capture a shopping preference and use that to personalize marketing emails
* Capture a communication channel preference and then use that utilize the preferred channel
* Capture data such as location or birthday to trigger or personalize offer emails
* Capture feedback like satisfaction to inform models.
* Capture email feedback like email relevance to suppress disinterested audiences

{% hint style="info" %}
Pulse Insights will get the data into Hubspot. From there, it will be up to you to leverage that data to provide superior service and marketing.&#x20;
{% endhint %}

## Integration Flow

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

## Prerequisites

Email links that capture user feedback will need to ingest the Hubspot Contact ID in order to update the appropriate record in Hubspot. You can ingest the Contact ID by appending the following to the Pulse Insights links.

```
&hscid={{contact.hs_object_id}}
```

Learn more about [link creation here](/implementing-pulse-insights-dev/implementing-in-email).

## Inputs we'll need from you

In order for us to configure the integration, we'll ask you tell us how you'd like it to work via [**this form**](https://www.pulseinsights.com/client-forms/submit-custom-integration-instructions).

* Endpoint details
* Access Token (if this changes frequently, we will need to know updated Token to avoid interruption in data send)
* Object Type (e.g. "Contacts) and Group (e.g. Contact Activity)
* UserID (often contact.id). Please see more details on Client Key [here](/implementing-pulse-insights-dev/implementing-on-web-and-mobile-web/client-key).&#x20;
* Property Name/Label of where the data will be hosted
* Field Type (e.g. single-line text or Number)
* Frequency (batch or near real-time)
* Update or create


# Braze

## What the integration accomplishes

You will be able to take responses from Pulse Insights and insert them into the appropriate user's Braze record to personalize future marketing and servicing communications and experiences. For example you might:

* Capture a shopping preference and use that to personalize marketing emails
* Capture data such as location or birthday to trigger or personalize offer emails
* Capture feedback like satisfaction to create segments of engaged users
* Capture email feedback like email relevance to suppress disinterested audiences

{% hint style="info" %}
Pulse Insights will get the data into Braze. From there, it will be up to you to leverage that data to provide superior service and marketing. )
{% endhint %}

## Prerequisites

Email links that capture user feedback need to ingest the User ID in order to update the appropriate record in Braze. You can ingest the User ID by appending the following to the Pulse Insights links.

```
&uid={{${user_id}}}
```

Learn more about [link creation here](/implementing-pulse-insights-dev/implementing-in-email).

## Inputs we'll need from you

* Endpoint details
* API Key
* REST API key permissions (e.g. Track)
* Attribute name to update
* Data Type (Datetime, Boolean, Number, String, Blank)
* Client Key (`user_id` OR `braze_id`). Please see [here](/implementing-pulse-insights-dev/implementing-on-web-and-mobile-web/client-key) for more details on Client Key.&#x20;
* Frequency (batch or near real-time)


# Google Analytics

## Overview

We currently support integrations with Universal Analytics and Google Analytics 4 (GA4). This is a tag based integration and is managed using callbacks. Please see more details about callbacks [here](/implementing-pulse-insights-dev/implementing-on-web-and-mobile-web/callbacks).&#x20;

{% hint style="warning" %}
Google Analytics 4 is replacing Universal Analytics. On July 1, 2023 all standard Universal Analytics properties will stop processing data. (360 Universal Analytics properties with a current order will receive a one-time processing extension ending on July 1, 2024.)
{% endhint %}

## What the integration accomplishes

Integrating with Google Analytics allows you to record survey response data and view responses alongside the rest of your data. &#x20;

For example you might:

* **Gain deeper insights**: Get a better understanding of customer behavior and how users are interacting with your website or application. Identify pain points, areas for improvement, and potential opportunities to enhance the user experience.
* **Make data-driven decisions**: Google Analytics is a powerful tool for tracking user behavior and engagement, but it's even more valuable when combined with customer feedback. By using both quantitative and qualitative data, you can make more informed decisions about how to optimize your digital channels and improve customer satisfaction.
* **Measure the impact of changes**: As you make changes to your website, you can understand how those changes are impacting user perceptions and behavior. By tracking customer feedback alongside analytics data, you can see how your enhancements are having the intended impacts.&#x20;
* **Identify trends and patterns**: Identify recurring themes and issues that may not be immediately apparent from analytics data alone. By analyzing feedback in conjunction with other metrics, you can gain a more holistic view of user behavior and preferences.
* **Improve customer satisfaction**: Ultimately, the goal of incorporating customer feedback into Google Analytics is to improve the overall customer experience. By understanding what users like and dislike about your website, your can make targeted improvements that lead to greater satisfaction, loyalty, and retention.

## Some ideas for what to analyze

* See how user's responses change per traffic source (e.g. organic, paid, referral) to learn about the audience quality and needs by channel.
* See how answers vary between first time visitors and returning visitors to understand the impact of the website itself on user perceptions.

## Integration Setup

When a user answers any Pulse Insights question, Pulse Insights will set an event in Google Analytics with the answer text of what the user's response. You can, in turn, create segments in GA based on the responses in order to analyze behavior. This level of analytics in GA4 requires some setup steps, both in your tag manager and in Google Analytics.

* **If you use Google Tag Manager (GTM)** please follow the steps in the [GTM Setup](#google-tag-manager-gtm-setup) section to:
  * [Create a Trigger](#first-create-a-trigger)
  * [Create a New Tag](#next-create-a-new-tag)

{% hint style="info" %}
If you do not use Google Tag Manager, please reach out to your Customer Success Manager for instructions.&#x20;
{% endhint %}

* **Setup steps are also required in Google Analytics.** Please reference the [Google Analytics Setup ](#google-analytics-setup)section to create a custom user dimension.&#x20;

## Google Tag Manager (GTM) Setup

### First, create a Trigger

While in your Google Tag Manager workspace:

1. Click **Triggers** from the left sidebar menu ![and then](https://lh3.googleusercontent.com/QbWcYKta5vh_4-OgUeFmK-JOB0YgLLoGh69P478nE6mKdfpWQniiBabjF7FVoCVXI0g=h36) **New**.

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

2. Enter a name for the trigger: `Pulse_Insights_Surveys`
3. Click **Trigger Configuration** and choose the **Custom Event** trigger type (located in the "Other" group).

<figure><img src="/files/qNnZFCHu1VK1O1UI0F6o" alt="" width="375"><figcaption></figcaption></figure>

4. Enter the Event Name: `SurveyAnswered`
5. Select "**use regex matching**" to allow this field to handle regular expressions.
6. For the "This trigger fires on", choose the "**Some Custom Events**" option.
7. Fire this trigger when an Event occurs and all of these conditions are true:
   * In the first dropdown, choose **Event**
   * In the second dropdown, choose **contains**
   * In the third box, enter `SurveyAnswered`
8. Click the **Save** button

**It should look something like this:**&#x20;

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

### Define User-Defined Data Layer Variables

Before setting up event parameters, create the necessary Data Layer variables to be used in the GA4 Event tag. These variables will capture key survey response details and make them available for Google Tag Manager.

To create the user-defined Data Layer variables, use the following names:

<table><thead><tr><th>Variable Name</th><th></th><th data-hidden></th></tr></thead><tbody><tr><td><strong>DIV - survey_id</strong></td><td><code>eventModel.survey_id</code></td><td></td></tr><tr><td><strong>DIV - acc_identifier</strong></td><td><code>eventModel.acc_identifier</code></td><td></td></tr><tr><td><strong>DIV - question_id</strong></td><td><code>eventModel.question_id</code></td><td></td></tr><tr><td><strong>DIV - question_text</strong></td><td><code>eventModel.question_text</code></td><td></td></tr><tr><td><strong>DIV - answer_id</strong></td><td><code>eventModel.answer_id</code></td><td></td></tr><tr><td><strong>DIV - answer_text</strong></td><td><code>eventModel.answer_text</code></td><td></td></tr></tbody></table>

Once these variables are created, they will be available when setting up event parameters in the next step.

<figure><img src="/files/5CGLPjjM53OQtTwg3Msi" alt=""><figcaption></figcaption></figure>

### Next, create a new Tag

1. In your Workspace, click <img src="https://fonts.gstatic.com/s/i/short-term/release/googlesymbols/label/fill1/48px.svg" alt="" data-size="line"> **Tags** in the left sidebar menu.
2. To add a tag, click **New**.

<figure><img src="/files/0OXBsz6cHzdRZiqe4OC8" alt=""><figcaption></figcaption></figure>

3. Name the tag: `GA4-PulseInsights`
4. Click the edit icon in the Tag Configuration section and choose the tag type: \
   `Google Analytics: GA4 Event`

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

5. In the "Configuration Tag" dropdown menu and select your **GA 4 Config** tag.

{% hint style="info" %}
If you need more help configuring a Google Analytics 4 tag in Google Tag Manager, please refer to Google's guide [here](https://support.google.com/tagmanager/answer/9442095?sjid=6368941973364861334-NA).
{% endhint %}

6. In the Event Name field, enter `SurveyAnswered`

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

{% hint style="info" %}
If you are asked to enter a Measurement ID, please refer to Google's guide for steps to find your Measurement ID, [here](https://support.google.com/analytics/answer/12270356). It should be a 'G-' followed by a combination of numbers and letters.
{% endhint %}

7. Set up the following Event Parameters:
   1. Click **Add Row**
   2. Type in the **Parameter Name** (please refer to the table below for Parameter names)
   3. Enter the corresponding **Value** (please refer to the table below for Value names)
   4. Click "**Add Row**" and repeat the steps until all six Event Parameters listed below are added.

<table><thead><tr><th>Parameter Name</th><th>Value</th><th data-hidden></th></tr></thead><tbody><tr><td>survey_id</td><td>{{DIV - survey_id}}</td><td></td></tr><tr><td>acc_identifier</td><td>{{DIV - acc_identifier}}</td><td></td></tr><tr><td>question_id</td><td>{{DIV - question_id}}</td><td></td></tr><tr><td>question_text</td><td>{{DIV - question_text}}</td><td></td></tr><tr><td>answer_id</td><td>{{DIV - answer_id}}</td><td></td></tr><tr><td>answer_text</td><td>{{DIV - answer_text}}</td><td></td></tr></tbody></table>

{% hint style="info" %}
If the Values shown in the table above do not show from the list of variable options, please contact your Customer Success Manager for help.&#x20;

You can also visit the Google support page for more details on [User-Defined Variables](https://support.google.com/tagmanager/topic/9125128?sjid=6368941973364861334-NA).&#x20;
{% endhint %}

8. Set up the following User Properties:
   1. Click **Add Row**
   2. Type in the **Property Name** (please refer to the table below for Property names)
   3. Enter the corresponding **Value** (please refer to the table below for Value names)
   4. Click "**Add Row**" and repeat the steps until all six User Properties listed below are added.

<table><thead><tr><th>Property Name</th><th>Value</th><th data-hidden></th><th data-hidden></th><th data-hidden></th></tr></thead><tbody><tr><td>survey_id</td><td>{{DIV - survey_id}}</td><td></td><td></td><td></td></tr><tr><td>acc_identifier</td><td>{{DIV - acc_identifier}}</td><td></td><td></td><td></td></tr><tr><td>question_id</td><td>{{DIV - question_id}}</td><td></td><td></td><td></td></tr><tr><td>question_text</td><td>{{DIV - question_text}}</td><td></td><td></td><td></td></tr><tr><td>answer_id</td><td>{{DIV - answer_id}}</td><td></td><td></td><td></td></tr><tr><td>answer_text</td><td>{{DIV - answer_text}}</td><td></td><td></td><td></td></tr></tbody></table>

{% hint style="info" %}
If the Values shown in the table above do not show from the list of user-defined variable options, please contact your Customer Success Manager for help.\
\
You can also visit the Google support page for more details on [User-Defined Variables](https://support.google.com/tagmanager/topic/9125128?sjid=6368941973364861334-NA).&#x20;
{% endhint %}

9. Lastly, in the Triggering section, click the edit icon, and choose the  `Pulse_Insights_Surveys` custom event (which was set up earlier in the [Create a Trigger](/integrations/integrations-overview/google-analytics#first-create-a-trigger) section.
10. Click **Save**.

When you view this newly created tag, it should look something like:

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

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

***

## Google Analytics Setup:

This section documents how to create a custom user dimension using the `answer_text` and `answer_id` user properties.&#x20;

### Create Custom Dimensions

A custom dimension allows you to analyze survey answers alongside other data and metrics collected on your website or app. The user scoped custom dimension is built using custom user properties. To set up the custom dimension in Google Analytics:

1. Click on the gear icon to access the "**Admin**" settings in the left sidebar.

<figure><img src="/files/a6OsYW2o1CmNt8msqc46" alt="" width="119"><figcaption></figcaption></figure>

2. Click on "**Custom definitions**".

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

3. In the Custom dimensions tab the “**Create custom dimensions**” button.&#x20;

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

{% hint style="info" %}
If you do not see this button this may mean that you do not have to proper access level to create custom dimensions. Please contact your Google Analytics Administrator.&#x20;
{% endhint %}

4. Fill out the form fields as follows:

<table><thead><tr><th>Field Name</th><th width="134.33333333333331">Value</th><th>Description</th></tr></thead><tbody><tr><td><strong>Dimension Name</strong></td><td>Pulse Insights Answer Text</td><td>Type in the unique name of "Pulse Insights Answer Text" without hyphens. </td></tr><tr><td><strong>Scope</strong></td><td>User</td><td>Choose "User" from the dropdown menu. </td></tr><tr><td><strong>Description</strong></td><td>Pulse Insights Answer Text captured at the user level</td><td>This short description will help you and others have context for what the custom dimension is. </td></tr><tr><td><strong>User Property</strong></td><td>answer_text</td><td>Choose from the dropdown. Dropdown options, such as <code>answer_text</code> are set up as User Properties in the Google tag or in Google Tag Manager. <a href="#google-tag-manager-gtm-setup">See instructions above</a>.</td></tr></tbody></table>

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

5. Click the "**Save**" button in the top right.&#x20;

### Next, create the Pulse Insights Answer ID dimension.

This dimension will enable you to correlate the answer text with the answer's unique ID. This is especially helpful if you have similar answer choices in multiple questions within a survey or in a different survey.  &#x20;

1. Repeat steps 1-3 above and fill out the form as follows:

| Field Name         | Value                                                                                         | Description                                                                                                                                                                                        |
| ------------------ | --------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| **Dimension Name** | Pulse Insights Answer ID                                                                      | Type in the unique name of "Pulse Insights Answer ID" without hyphens.                                                                                                                             |
| **Scope**          | User                                                                                          | Choose "User" from the dropdown menu.                                                                                                                                                              |
| **Description**    | Unique number that is associated with one and only one answer in the Pulse Insights database. | This short description will help you and others have context for what the custom dimension is.                                                                                                     |
| **User Property**  | answer\_id                                                                                    | Choose from the dropdown. Dropdown options, such as `answer_id` are set up as User Properties in the Google tag or in Google Tag Manager. [See instructions above](#google-tag-manager-gtm-setup). |

2. Click the "**Save**" button in the top right.&#x20;

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

### You can now add the custom dimensions as a "Comparison" in Reports:

1. On the Reports page, click the "**Add Comparison +**" button

<figure><img src="/files/ncIgtFlM8MICvxdIVEPT" alt="" width="399"><figcaption></figcaption></figure>

2. Select a custom dimension from the dropdown menu
3. Select a dimension value from the dropdown menu

You can add up to 5 dimensions. To add another dimension, click the "**+ Add new condition**" button. Click the trash icon to remove a condition.&#x20;

<figure><img src="/files/8L9C7sZBpmsRboLxuQm1" alt="" width="237"><figcaption></figcaption></figure>

4. Click "**Apply**"

<figure><img src="/files/UaFLyAehLmw7nEkNfyDS" alt="" width="257"><figcaption><p>Add Pulse Insights custom dimensions as a comparison in Reports</p></figcaption></figure>

### Or as a "Dimension" in Explorations:

<figure><img src="/files/zOJEH8nnPF1K39YJGMGT" alt="" width="563"><figcaption><p>Add Pulse Insights Survey as a dimension in Explorations</p></figcaption></figure>

{% hint style="warning" %}
Note: You will see a value of [(not set)](https://support.google.com/analytics/answer/11151150) for a custom dimension in the first 48 hours. Any survey responses collected before creating the custom dimension will not be set. Be sure to create the custom dimension before setting the survey live.
{% endhint %}

### Data Availability in Google Analytics

Before you can analyze survey response data and run comparisons, the survey must be **live and actively collecting responses**. Data typically takes **24–48 hours** to appear in Google Analytics due to standard GA processing times. This delay is a Google Analytics requirement and not specific to Pulse Insights.

If you do not see data immediately, please check back after 48 hours and ensure the survey is receiving responses.


# Data Lake

## Overview

Our solution offers seamless integration with your preferred data lake to facilitate the automatic transfer of submission data to your desired destination. Our integration architecture is flexible, and can accommodate customizations to suit your configuration, be it an Amazon S3 bucket, SFTP server, or another repository.

## What the integration accomplishes

* **Uncover new insights** by automatically importing response data into your organization's analytics or cloud platform to link data that only exists in your enterprise back-end.
* **More comprehensive analysis:** By combining feedback data with other customer data sources, you can gain a more complete understanding of customer behavior, preferences, and sentiment.
* **Automate the collection and analysis**: Reduce the time and resources required to gather insights and make data-driven decisions. Quick insights all in one place leads to faster and more effective decision-making.

## Inputs we'll need from you

* Destination (e.g. s3 bucket, sftp, etc.)
* Authorization (e.g. API key, Access Key)
* Desired Data Points (see standard list [here](/integrations/integrations-overview#data-points))
* Data format (e.g. csv, JSON)
* Frequency (batch or near real-time)
* Timing: what time window should we send the data?
* File name
* Control file

{% hint style="info" %}
The above inputs can be shared with your CSM by filling out [this form](https://www.pulseinsights.com/client-forms/submit-custom-integration-instructions).&#x20;
{% endhint %}


# Account Setup


# Authentication & SSO

## Multi-Factor Authentication&#x20;

To enhance the security of your Pulse Insights Console account, we strongly recommend enabling Multi-Factor Authentication (MFA). This additional layer of protection ensures that only you can access your account by requiring two verification methods. Follow the steps below to set up MFA on your account.

#### 1. Log into Console

#### 2. Click on your name menu dropdown.

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

#### 3. Click on Name & Password

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

#### 4. Scroll down to the "Multi-factor Authentication" section. Click on "Set up MFA"

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

#### 5. Open you authenticator app such as Google Authenticator, Microsoft Authenticator, Authy, etc.

Click to add a new account by scanning QR code.&#x20;

{% hint style="info" %}
Directions on how to add a new account may vary between authenticator apps. Please refer to your preferred authenticator app's documentation on how to scan a QR code to add a new account.
{% endhint %}

#### 6. Scan the QR code on the page.

Follow the directions on your authenticator app to scan the QR code on the Pulse Insights Console page using your device.

<figure><img src="/files/0Eit2rR8qZs5Rhy30SvJ" alt=""><figcaption></figcaption></figure>

#### 7. Enter you Pulse Insights Console password, then enter the one-time code from your authenticator app.

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

#### 8. Click on Confirm and Enable Multi-factor Authentication

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

#### 9. Copy & Paste your backup codes into a secure place.

Backup codes will help you recover your account if you lose access to your authenticator app.&#x20;

{% hint style="warning" %}
These codes will never be shown again, so make sure to save them now.
{% endhint %}

<figure><img src="/files/7iG2GH12F6kg7EeNrDjH" alt=""><figcaption></figcaption></figure>

#### 10. Click on Return to account settings

You are now set up with Multi-Factor Authentication. You will be prompted for your code on your next login.

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

### Logging in with Multi-Factor Authentication Enabled

#### 1. Next time you log into the Pulse Insights Console, you will be required to enter your one-time authentication code.

Log in with your email and password (or sign in with Google) like you normally would.

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

#### 2. Open the authentication app on your device and locate the code for your Pulse Insights account.

#### 3. Type your code.&#x20;

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

{% hint style="info" %}

#### If you lost access to your authentication code, you can use your recovery code that you saved earlier.

{% endhint %}

#### 4. Click on Sign In

You are now signed into your Pulse Insights Console account.&#x20;

{% hint style="info" %}
If you have trouble logging in, please contact <support@pulseinsights.com>
{% endhint %}

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

### Disabling Multi-Factor Authentication

#### 1. Click on your name dropdown menu

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

#### 2. Click on Name & Password

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

#### 3. Click on "Disable Multi-factor Authentication"

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

#### 4. Multi-factor Authentication should now be disabled for your account.

{% hint style="info" %}
Please contact your CSM or <support@pulseinsights.com> if you encounter any issues.
{% endhint %}

## Single Sign-on (SSO)

The Pulse Insights Console also supports OAuth and SAML single sign-on. Please reach out to your CSM to inquire further about SSO.&#x20;

## Single Sign-on with Google

If your Console account is associated with a Gmail account, then you can sign in with Google. On the login page, simply click the Sign in with Google button to log in with your Gmail account.


# Inviting Collaborators

From the User Management page, you can invite collaborators to the account. Simply choose "User Management" from the Settings dropdown menu, enter the desired email, assign the level of access, and hit "Invite".  For more details on the different roles and permissions, please read [here](/configuring-pulse-insights-console/account-setup/roles-and-permissions).&#x20;

An invitation email will be sent to the email address and the collaborator can finish setting up their account.&#x20;

<figure><img src="https://assets.website-files.com/62ae50311253ba87925cbbc9/63407f4db9d4ce75a1970e5e_gvEvtDahOzyFVBaOt7t8wm8Xoznp1lgESwpDy08slxr6V-BR5fNZ_373NkPH_pr98j_wmlWOTpqG2tA42z220sQ6s53bFPU_bGDNNjziD3cd6R0mYXV1DVeDonXy5S6cUBZbDaMH.png" alt=""><figcaption></figcaption></figure>

{% hint style="info" %}
Full Access users can change the level permissions from this page by clicking the dropdown in the "Level" column of the users table and choosing the desired Role.&#x20;
{% endhint %}


# Roles & permissions

## Permission levels

There are 2 types of permission levels in the product.

<table><thead><tr><th width="180">Role</th><th>Capabilities</th></tr></thead><tbody><tr><td>Reporting Only</td><td>Read Only users can view, download and schedule survey reports. </td></tr><tr><td>Full Access</td><td><p>Full Access users can:</p><ul><li> View survey reports</li><li>Invite and manage users</li><li>Create and edit surveys</li><li>Change survey statuses</li><li>Create and edit themes and survey formatting</li><li>Manage callbacks, account-wide and survey-level targeting</li><li>Create and edit automations</li></ul></td></tr></tbody></table>


# Dashboard & Program Management

Pulse Insights gives you an at-a-glance view of your surveys from your Survey Dashboard. The dashboard is the first thing you see when you log in and you can navigate back to this view at any time by clicking on the Pulse Insights logo <img src="/files/urrI0DfYESLZlZbaq63C" alt="" data-size="line">in the top left of the navigation bar.

## Survey Index

The dashboard includes an index table of all of your surveys. Each row shows the survey’s:

* **Name -** Name of the survey.
* **Survey Status -** see [Survey Status](/configuring-pulse-insights-console/dashboard-and-program-management/survey-status) for more details on types of statuses and how to change a survey's status.&#x20;
* **Metrics -** such as Impressions, Submissions, Submission Rate (Note: The default date range for metrics shown in the Survey Index is "All-Time". You can use the date range filter in the left side panel to change the date range, or view the survey's Results page for a more detailed look at metrics and more filtering options.&#x20;
* **Goal -** Submission goal for the survey.
* **Last Submission -** Date of the last submission.
* **Last Change -** Date of the last edit to the survey
* **Edited By -** Name of user who made the last change to the survey.

{% hint style="info" %}
You can sort the table by clicking on the column header names. You can also left click on the column header names to display a menu where you can show/hide columns (see image below).&#x20;
{% endhint %}

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

## From the dashboard you can:

* **Create a new survey** by clicking the <img src="/files/qsq4LS2ku5L7hnyhB3lZ" alt="" data-size="line"> button in the top right.
* **Settings** - Manage the account-level settings by clicking on  <img src="/files/yakYbWM2EzR6vOPOxvA6" alt="" data-size="line"> dropdown menu in the top right. Read more about account-level settings [here](broken://pages/C5CTT6PybuvzqVRDfxeh). &#x20;
* **User-level account settings -** Click on your name in the top right corner to reveal a dropdown where you can change your name & account password, set up Scheduled Reports, or Logout. If you have multiple accounts associated with your email, then all your accounts will be listed in this menu and you can switch between those accounts using this menu.&#x20;

<figure><img src="/files/RVG4BRGKjH1f1atO9E8m" alt="" width="166"><figcaption></figcaption></figure>

* **Edit** an existing survey by hovering over the survey row to reveal the <img src="/files/7slU3JqF1wvptsV3UMiB" alt="" data-size="line"> three dot menu button for the dropdown menu and clicking "Edit". More details on the Survey Editor [here](/configuring-pulse-insights-console/editor).
* **View survey results** by hovering over the survey row to reveal the <img src="/files/648XftP5wHqokagHbVlc" alt="" data-size="line"> three dot menu button for the dropdown menu and clicking the "Results" option. See the [Results](/configuring-pulse-insights-console/reporting/results-page-and-filtering) section for more details about survey results.&#x20;
* **Create a survey group** by hovering over the survey row <img src="/files/LHGHga9PmFkptP0PmAQD" alt="" data-size="line"> three dot menu button for the dropdown menu and clicking the "Create Group" option. More details on survey groups [here](/configuring-pulse-insights-console/editor/survey-groups-localization).&#x20;
* **Duplicate** a survey by hovering over the survey row to reveal <img src="/files/bxMapBZFfqa2quF6nmry" alt="" data-size="line"> three dot menu button.‍ Choose the "Duplicate" option in the menu. This will create a new survey that is identical to the copied survey (including questions, answers, targeting and formatting).&#x20;

<figure><img src="/files/O4TTYElt7TUkkVnVwI7q" alt="" width="563"><figcaption></figcaption></figure>

## Filter Side Panel

You can filter the dashboard view down to the survey list you'd like to see. In the filtering panel, located on the left side of the Dashboard, there are several options for filtering down the surveys in the survey index.&#x20;

* **Search** - You can use the search box to search for a specific survey name or survey ID.&#x20;
* **Date Range** - You can filter the metrics displayed in the survey index by using the date picker. You can select a specific date range, or use the provided shortcuts: Yesterday, Last 7 Days, Last 30 Days, All-Time. Note: the date range is set to All-Time by default.
* **Status** - Select/deselect statuses to view/hide surveys with that status from the Dashboard view.&#x20;
* **Tags** - Display surveys with specific tags (e.g. "Staging", "Product Page", "A/B Test", etc).&#x20;
* **Created By** - See surveys created by specific users.&#x20;
* **Last Edited By** - See surveys last edited by a specific user.
* **Last Changed** - See surveys edited within your selected date range.

<figure><img src="/files/URwwpVPt7dbtVSW77gFe" alt="" width="290"><figcaption></figcaption></figure>


# Survey Status

There are 5 different survey statuses:

| Status   | Description                                                                                                     | When to Use                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        |
| -------- | --------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| Draft    | Newly created surveys are in "Draft" mode by default. When in "Draft" mode, the survey is not currently firing. | Use this status when you are making edits to a survey. Use this survey status when you want to use the Console's [Live Preview](/configuring-pulse-insights-console/editor/preview#live-preview) mode.                                                                                                                                                                                                                                                                                                                                                                                             |
| Live     | The survey is firing and eligible for end users.                                                                | When all survey edits have been made and the survey is ready to be shown on the site. You can also use the [Live Preview](/configuring-pulse-insights-console/editor/preview#live-preview) mode to preview surveys with "Live" status.                                                                                                                                                                                                                                                                                                                                                             |
| Paused   | The survey is not firing for end users.                                                                         | <p>This status is ideal for when you'd like to temporarily stop the survey from being shown to users, but would like to set it live again in the near future. <br><br>Paused surveys are hidden in the Dashboard view by default, but you can view Complete surveys by checking "Paused" in the left filter panel.</p>                                                                                                                                                                                                                                                                             |
| Complete | The survey is not shown to end users.                                                                           | <p>Surveys automatically change to "Complete" status when an end date is reached (set in Targeting), or when the Submission Goal is met. </p><p></p><p>You can also manually set the survey status to "Complete" if you'd like to stop showing the survey and the survey is not expected to go back "Live" in the future (note: use the "Paused" or "Draft" status if you expect to set the survey live again in the future). </p><p></p><p>"Complete" surveys are hidden in the Dashboard view by default, but you can view Complete surveys by checking "Complete" in the left filter panel.</p> |
| Archived | The survey is not firing for end users.                                                                         | <p>Use this status when the survey will not be set live again and you would like to hide the survey from the default dashboard view. </p><p></p><p>You can see "Archived" surveys in the Dashboard by selecting "Archived" in the left filter panel. </p><p></p><p>Archiving a survey does NOT delete submission data and you can still view and download results for Archived surveys. </p>                                                                                                                                                                                                       |

## How to Change a Survey's Status

There are 3 locations within the Console where you can change a survey's status. Simply click on the dropdown menu and select the desired status. If you are choosing to set a survey "Live", a popup will appear to ask "Are You Sure?". This is to prevent any accidental launching of surveys before they are ready! Just click "OK" to proceed, or "Cancel" to keep the survey in its current status.

### Via the Dashboard:

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

### Via the Survey Editor:

<figure><img src="/files/3nITixJ6cMra24FsnWRC" alt=""><figcaption></figcaption></figure>

### Via the Survey Results Page:

<figure><img src="/files/9eNxjmPtzwShYRJnrAwi" alt=""><figcaption></figcaption></figure>


# Editor

The main canvas is where you build and configure your survey. You can add and remove survey question and answers, fine-tune settings for each question, and determine the order in which the questions display.&#x20;

When you create a new survey, you will see the "Survey Begins" endpoint, connected to a Single Choice Question card, and a Thank You message.

## Routing:&#x20;

Routing is how you define the follow-up question. The next question is determined by the routing lines that connect question cards.  For some question types, you can connect each possible answer to a specific next question by clicking on the answer's endpoint on the right and dragging a routing line to the endpoint of the desired next question card (on the left of the question card).&#x20;

To delete a connection between an answer and the followup question, simply click on the connecting line and hit the delete/backspace button on your keyboard.

If there isn’t a branching line drawn, the default next step is the “Thank You” message.

{% hint style="info" %}
Question routing is not applicable for "All-at-once" surveys. Please see "[Question Display](/configuring-pulse-insights-console/editor/formatting/question-display)" for more details about All-at-once surveys.
{% endhint %}


# Question Types

Pulse Insights supports the following question types:&#x20;

* [Single Choice](/configuring-pulse-insights-console/editor/question-types/single-choice)
* [Multi Choice](/configuring-pulse-insights-console/editor/question-types/multiple-choice)
* [Free Text](/configuring-pulse-insights-console/editor/question-types/free-text)
* [Slider](/configuring-pulse-insights-console/editor/question-types/slider)
* [NPS](/configuring-pulse-insights-console/editor/question-types/net-promoter-score)
* [Custom Content](/configuring-pulse-insights-console/editor/question-types/custom-content-next-best-action)


# Survey Invitation

You can optionally add an invitation to your survey, which enables users to opt-in to take a brief survey. An invitation to take a survey is typically not necessary and is not used by default.&#x20;

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

You can add an invitation by clicking the “+” then “Invitation” and the survey invitation will be added to the start of the survey and connected to the first question.

Enter the message you would like to show and the opt-in button. &#x20;

<figure><img src="/files/CoWlHKra9NK3pi5WhukR" alt="" width="423"><figcaption></figcaption></figure>


# Single Choice

A single choice question enables the user to select one appropriate answer from a list of options.

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

## Add a new Single Choice Question

To add a new single choice question, simply click on the "+" icon in the bottom right of the canvas and select Single Choice.

## Configuring Question and Possible Answers

* Double click in the Question field and type your desired question.
* To add an additional possible answer, click on "Add New".&#x20;
* To remove a possible answer, click on the trash icon to the right of the answer.
* Double click in the possible answer field to type your desired answer text.&#x20;
* To change the order of answers, click on the dots to the left of the answer and drag and drop the answer in the desired position.&#x20;
* You can optionally add images to your responses, such as a thumbs up/down. To add images, click on the image icon on the right of each answer. This will open a modal where you can select an image to use, or upload a new image file. You can choose to display just the image, or the image and text. Next, you can enter the size you would like the image to render on desktop, table and mobile (in px or as a %). You can also add fallback text, which will be shown if the image cannot load.&#x20;

## Single Choice Settings

There are several more options for configuring your single choice question. To choose your desired settings, simply click on the Settings button <img src="/files/uUjO3WuJAsASQBnftboN" alt="Settings button" data-size="line"> on the bottom left of the single choice card.&#x20;

{% hint style="info" %}
These are question-level settings. The configurations you choose do not carry over to all questions, or all single-choice questions in your survey. If you have multiple single choice questions in your survey, you will need to make configure your desired settings for each individual question.
{% endhint %}

### Answer Order

For single choice questions, you can display the answers options in the order they are created and displayed in the question card, or you can choose to randomize the answer order.&#x20;

&#x20;There are two settings:

* Randomize all responses
* Randomize all except the last — this is useful if you have an ‘Other’ option that you want to remain last

You may want to use this "randomize" option if you think the order in which answers are shown may create a bias (e.g. the first answer may get chosen more often).&#x20;

### Button Style

There are 3 button styles to choose from:

1. Standard button
2. Radio button
3. Dropdown menu

Please see the next section for additional options for each button styles.&#x20;

### Answer Options

For the Standard & Radio button styles, you can also configure the number of answers per row for desktop and mobile.&#x20;

For Standard button style, there is additional settings for button width (fixed or variable)  and the button distribution (Aligned Left/Center/Right; Spaced Between/Around/Evenly) for desktop and mobile views.&#x20;

For Menu-style, you can configure the Default Label, which is what the user will see before selecting a valid response. The default label text is “Select an option”.&#x20;

### Additional Text

You also have the option to add additional text before and/or after the question, as well as labels for Before and/or after answers.

{% hint style="info" %}
Using before/after answer labels is a great way to ask scaled questions and to define the scale. For example, the question can be, "How would you rate this page?" with answer options 1-5. Use answer labels to define the lower and upper end of the scale.&#x20;
{% endhint %}

### Single Choice Options

In this section, you can define empty error text. This only needs to be set if your survey will be shown in All-at-once mode with individual question empty error enabled. Please see "[Question Display](/configuring-pulse-insights-console/editor/formatting/question-display)" section for more details. If this is not set, the default message will display (Required.).

### Additional Content

You can optionally display custom content at the header or footer of the question. You can use the simple WYSIWYG editing or advanced HTML editing, complete with code beautification and line numbers.

This is a great feature to use to show any fine print or disclaimers. <br>


# Using Images

You can optionally add images to your responses, such as a thumbs up/down.&#x20;

{% hint style="info" %}
Images are currently only supported for Single Choice question types.
{% endhint %}

To add images:

* Click on the image icon on the right of a single choice answer
* A modal will appear where you can select an image to use, or upload a new image file
* Choose to display just the image, or the image and text
* Enter the size you would like the image to render on desktop, table and mobile (in px or as a %)
* You can also add fallback text, which will be shown if the image cannot load

<figure><img src="/files/RAgQwbCQyg288nSyuY2C" alt="" width="375"><figcaption></figcaption></figure>


# Multiple Choice

Multiple Choice questions enable the user to select one or more responses at a time. After the user selects the answer(s), the user clicks on the "Submit" button to submit their response(s).&#x20;

<figure><img src="/files/4lHM5d4SF3aBbYe7PSaF" alt=""><figcaption></figcaption></figure>

## Add a new Multiple Choice Question

To add a new multiple choice question, simply click on the "+" icon in the bottom right of the canvas and select "Multi Choice".

## Configuring Question and Possible Answers

* Double click in the Question field and type your desired question.
* To add an additional possible answer, click on "Add New".&#x20;
* Double click in the possible answer field to type your desired answer text.&#x20;
* To remove a possible answer, click on the trash icon to the right of the answer.
* To change the order of answers, click on the dots to the left of the answer and drag and drop the answer in the desired position.&#x20;

## &#x20;Multi Choice Settings

There are several more options for configuring your multiple choice question. To choose your desired settings, simply click on the <img src="/files/S0M4qvERO0ZjqVN8VPWL" alt="" data-size="line"> button on the bottom left of the multiple choice card.&#x20;

{% hint style="info" %}
These are question-level settings. The configurations you choose do not carry over to all questions, or all multi-choice questions in your survey. If you have more than one multiple choice questions in your survey, you will need to make configure your desired settings for each individual question.
{% endhint %}

### Answer Order

For multiple choice questions, you can display the answers options in the order they are created and displayed in the question card, or you can choose to randomize the answer order for all responses.&#x20;

### Multiple Choice Options

In this section of the settings, you can:

* Configure the number of answers per row for desktop and mobile
* Enable and set the maximum number of allowed user selections
* Customize error text for:
  * when the user selects more than the maximum allowed selections. The default message is "Maximum of x please." where "x" is the number of maximum selections set.
  * Empty error text: This only needs to be set if your survey will be shown in All-at-once mode with individual question empty error enabled. Please see "[Question Display](/configuring-pulse-insights-console/editor/formatting/question-display)" section for more details. If this is not set, the default message will display, which is: "Required.".
  * Submit button text: The default value is "Submit" when this field is not filled out.&#x20;

### Additional Content

You can optionally display custom content at the header or footer of the question. You can use the simple WYSIWYG editing or advanced HTML editing, complete with code beautification and line numbers.

This is a great feature to use to show any fine print or disclaimers.&#x20;

questions, you can set the maximum number of checkboxes the user can select. If you enable this option, you can enter the number of maximum responses a user can select (e.g. Select all that apply, up to 3).&#x20;


# Free Text

Free text questions allow you to collect data from users in their own words. It is helpful if you want to hear the nuance of language choices or if you are unsure of what types of things users might say so can’t yet devise a question with a fixed set of possible answers. Free text questions tend to have a lower response rate because it require more effort from the user.

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

## Add a new Free Text Question

To add a new free text question, simply click on the "+" icon in the bottom right of the canvas and select "Free Text".

## Configuring Question

Simply double click in the free text card's Question field and type your desired question.

## Free Text Settings

There are several more options for configuring your free text question. To choose your desired settings, simply click on the <img src="/files/eHzL18OMed748kKdRhT1" alt="" data-size="line"> button on the bottom left of the free text card.&#x20;

{% hint style="info" %}
These are question-level settings. The configurations you choose do not carry over to all questions, or all free text questions in your survey. If you have more than one free choice text in your survey, you will need to make configure your desired settings for each individual question.
{% endhint %}

### Free Text Options

In this section you can:

* Input text for:
  * **Hint Text**: This is the text that will display in the text input box before the user starts typing his or her answer.&#x20;
  * **Submit Label**: This is the text of the button the user will click to submit their free text response. The default value is "Submit" when not explicitly set.
  * **Error Text**: The error message that displays when there is a value detected that has masking enabled in the Account Settings (e.g. email or phone number). Please see "Personal Information Detection and Error Messaging" section below.
  * **Empty Error Text**: This only needs to be set if your survey will be shown in All-at-once mode with individual question empty error enabled. Please see "[Question Display](/configuring-pulse-insights-console/editor/formatting/question-display)" section for more details. If this is not set, the default message will display, which is: "Required.".
* **Input field rows**: this setting determines the line height of the text area. The default value is 1 row.&#x20;
* **Max Length**: this input determines the maximum number of characters allowed for the user response.

#### Personal Information Detection & Error Messaging

Pulse Insights automatically monitors open-text responses in surveys to help prevent the collection of personally identifiable information (PII). If a response appears to include sensitive information, the user will see the following error message:

> **"Oops, looks like you are trying to submit personal information."**

This behavior is controlled at the account level via **Data Masking Settings**, and is enabled by default for all accounts with PII restrictions in place.

**Trigger Criteria**

The system triggers this error when open-text input contains patterns that match known PII formats. These include:

* **Email addresses**
* **Phone numbers**
* **Social Security Numbers (SSNs)** or similar government ID formats (U.S. or international)
* **Credit card numbers**
* **Driver’s license numbers**
* Any string containing a **large number of consecutive digits** (to detect structured numerical identifiers)

Detection is pattern-based and may vary slightly depending on regional formatting (e.g., U.S. vs EU identifiers), but it is primarily designed to catch sensitive data entry, not general personal information like names or dates.

**Customization**

The error message text can be customized for each free text question using the **Error Text** field in the Console. If no custom message is entered, the default system message will display.

### Additional Content

You can optionally display custom content at the header or footer of the question. You can use the simple WYSIWYG editing or advanced HTML editing, complete with code beautification and line numbers.

This is a great feature to use to show any fine print or disclaimers.&#x20;

questions, you can set the maximum number of checkboxes the user can select. If you enable this option, you can enter the number of maximum responses a user can select (e.g. Select all that apply, up to 3).&#x20;


# Net Promoter Score

The Net Promotor Score (NPS) question type asks the user to choose a rating on a scale of 0–10 rating scale, "How likely are you to recommend us to a friend or colleague?".

<figure><img src="/files/0UDtrZvR1n2LV9WncM24" alt=""><figcaption></figcaption></figure>

## Add a new NPS Question

To add a new NPS question, simply click on the "+" icon in the bottom right of the canvas and select "NPS".

## Configuring the Question

The NPS question type is pre-configured to the standard question and 0-10 scale answers, but you can still configure the question to fit your needs.

Simply double click in the Question field to type/edit your desired question.

{% hint style="info" %}
Note: Since NPS is a defined scale, you cannot edit, delete, reorder possible answers. If you'd like to ask a non-NPS scaled question, please use the Single Choice question type instead.&#x20;
{% endhint %}

## NPS Settings

There are several more options for configuring your NPS question. To choose your desired settings, simply click on the <img src="/files/ICIwbcxu53yrg61RnfA7" alt="" data-size="line"> button on the bottom left of the NPS card.&#x20;

{% hint style="info" %}
These are question-level settings. The configurations you choose do not carry over to all questions, or all NPS questions in your survey. If you have more than one NPS question in your survey, you will need to make configure your desired settings for each individual question.
{% endhint %}

### Answer Options

In this section, you can configure the number of answers per row for desktop and mobile. The default setting is 11 answers per row on desktop (so answers 0-10 displayed in one row), and 6 per row on mobile.

### Additional Text

You also have the option to add additional text before and/or after the question, as well as labels for Before and/or after answers.

{% hint style="info" %}
Using before/after answer labels is a great way to define the NPS scale. Use answer labels to define the lower and upper end of the scale. For example, set the lower end of the scale to be "Very Unlikely", and the higher end to be "Very Likely".&#x20;
{% endhint %}

### NPS Question Options

In this section, you can define empty error text. This only needs to be set if your survey will be shown in All-at-once mode with individual question empty error enabled. Please see "[Question Display](/configuring-pulse-insights-console/editor/formatting/question-display)" section for more details. If this is not set, the default message will display (Required.).

### Additional Content

You can optionally display custom content at the header or footer of the question. You can use the simple WYSIWYG editing or advanced HTML editing, complete with code beautification and line numbers.

This is a great feature to use to show any fine print or disclaimers.&#x20;


# Slider

The slider question type allows the user to select an option from a range of options in a sliding scale.

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

## Add a new Slider Question

To add a new Slider question, simply click on the "+" icon in the bottom right of the canvas and select "Slider".

## Configuring Question and Scale Labels

* Double click in the Question field and type your desired question.
* To add an additional scale label, click on "Add New".&#x20;
* To remove a scale point, click on the trash icon to the right.
* Double click in the possible answer field to type your desired answer text.&#x20;
* To change the order of answers, click on the dots to the left of the answer and drag and drop the answer in the desired position.&#x20;

## Slider Settings

There are several more options for configuring your slider question. To choose your desired settings, simply click on the <img src="/files/2dqSLQL5CgOIaFA4SBeO" alt="" data-size="line"> Settings button on the bottom left of the slider question card.&#x20;

{% hint style="info" %}
These are question-level settings. The configurations you choose do not carry over to all questions, or all slider questions in your survey. If you have multiple slider questions in your survey, you will need to make configure your desired settings for each individual question.
{% endhint %}

### Options

In this section you can configure the:

* Start Position: Select the starting point by choosing one of the predefined scale labels from the dropdown menu
* Show/Hide the Submit Button by checking/unchecking the checkbox.
* Submit Button Text: The default value is "Submit" when this field is not filled out.&#x20;
* Empty Error Text: This only needs to be set if your survey will be shown in All-at-once mode with individual question empty error enabled. Please see "[Question Display](/configuring-pulse-insights-console/editor/formatting/question-display)" section for more details. If this is not set, the default message will display, which is: "Required.".

<figure><img src="/files/MDbXCbXDPDqB32pO6FCT" alt="" width="563"><figcaption></figcaption></figure>


# Custom Content (Next Best Action)

Show helpful content, links, and tools to guide users based on what a user just told you. Track how many users take advantage so you can quantify the value you're driving and the costs you're deflecting for your organization.

Custom Content enables you to display rich, immersive content in response to a survey answer. For example, if a user doesn’t understand something, can’t find something, or needs help, you can dynamically help the user by showing appropriate content.

## Adding Custom Content

To add a new multiple choice question, simply click on the "+" icon in the bottom right of the canvas and select "Custom Content".&#x20;

Start by naming the card by double clicking on the text area. Survey participants will not see this name, this is just for organizational purposes. This name is only for reference so you know the content without having to open up the Custom Content editor.

Next, click on “Settings”. This will open up a modal where you can edit your custom content card.

<figure><img src="/files/mpgPuPhSpofe4KSKfJGc" alt="" width="563"><figcaption></figcaption></figure>

Custom Content supports executing JavaScript, which can be configured using the simple WYSIWYG editing or advanced HTML editing, complete with code beautification and line numbers.&#x20;

<figure><img src="/files/vHjN80IhezGF1RLRkvFs" alt="" width="563"><figcaption></figcaption></figure>

You can also upload images, which are hosted on our CDN, Cloudfront.

## Options

There are several options available for the Custom Content card including:

* Enabling a full screen take over, with configuration for a background color and opacity.
* Auto close after *n* seconds
* Auto redirect to a page after *n* seconds


# Thank You Message

A Thank You Message is displayed when a user completes a survey submission. All questions or answers that are not routed to a next question or custom content card will display the Thank You Message. The message automatically closes after a few seconds so the end user can get back to business.

You can edit the Thank You Message by double clicking in the field and typing your desired message.

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

{% hint style="info" %}
Learn how to display poll results instead of a Thank You message [here](/configuring-pulse-insights-console/editor/question-types/thank-you-message/poll-show-results). Learn how to use Custom Content to display Next Best Actions [here](/configuring-pulse-insights-console/editor/question-types/custom-content-next-best-action).
{% endhint %}


# Poll (Show Results)

You can easily turn any one question survey into a poll and display the poll results when a user answers the poll question. After you set up your survey question and answers, simply check the \
"Show results instead" checkbox on the Thank You card. Instead of a "Thank you for your feedback" message, the poll results (number of responses per answer and the % share) will display when a user answers the question.

<figure><img src="/files/7mwxxJJipfZE949jhOcp" alt=""><figcaption><p>Console Setting</p></figcaption></figure>

<figure><img src="/files/2aT5Ky4soK5uejvNiCfM" alt="" width="301"><figcaption><p>Example of Poll Results</p></figcaption></figure>


# General

## Survey Tags

You can optionally add tags to your survey for organizational purposes. You can filter by specific tags in the survey dashboard. For example, you can tag a survey with "Staging" to indicate a survey that is being QA'd on your staging site.&#x20;

To apply a tag to a survey, click on the input area and select your desired tag from the dropdown menu. You can apply more than one tag to a survey. The dropdown menu will only show existing tags.&#x20;

To create a new tag click "Manage Tags", then "New Tag". Enter the name of the tag and hit "Save". The newly created tag will now show in the dropdown and as a filter option on the survey dashboard page.

&#x20;

<figure><img src="/files/Hkc37F3EAY0gZ2vXWP36" alt="" width="563"><figcaption><p>Select tag(s) from the dropdown menu</p></figcaption></figure>

<figure><img src="/files/D4MNUK3xnAjDWn1auOL4" alt="" width="563"><figcaption><p>Selected tag is applied to the survey</p></figcaption></figure>

<figure><img src="/files/a8MU4UESFfqhTs6iR8Qn" alt="" width="563"><figcaption><p>You can filter down surveys displayed in the survey dashboard by selecting a Tag</p></figcaption></figure>

## Audit Log

You can view recent activity for a particular survey by going in the editor, clicking the "General" tab in the right side panel. The last few changes are displayed in the "Audit Log" section.

&#x20;

<figure><img src="/files/CQ9xS1lFNuFUqZyJ3Wdy" alt="" width="563"><figcaption></figcaption></figure>

Click the "More" button to see up to the last 10 changes. Click "See All" in the modal to see all changes in the Audit Log.&#x20;

&#x20;

<figure><img src="/files/NDWnuIvh4zy5jJT1VowE" alt="" width="375"><figcaption></figcaption></figure>

{% hint style="info" %}
Please see the section on [Activity Log](/configuring-pulse-insights-console/account-level-settings/activity-log) for more details.
{% endhint %}


# Targeting

The configurations in “Targeting” determine the circumstances that the survey is eligible to render.

In the Targeting Panel, you can:

* Target specific Device Types
* Set up display and suppressions rules for URLs, View Names, and Regex&#x20;
* Set a sample rate
* Add survey start & end dates
* Target users who answered previous surveys
* Set up on-page behavior triggers
* Set up user behavior triggers
* Enable CRM targeting
* Target specific geographical locations
* Determine a submission goal

  <figure><img src="/files/2zXm9kFt2uwROi3f0Chb" alt="" width="317"><figcaption></figcaption></figure>

{% hint style="warning" %}
Targeting rules work in conjunction with the Pulse Insights tag. If the tag is not on a page, the survey will NOT be eligible to show, even if all the targeting criteria is met.
{% endhint %}

You can set up many targeting conditions, but we recommend keeping it simple.&#x20;

{% hint style="info" %}
Unless otherwise noted, targeting conditions set across sections are AND statements, not OR.&#x20;
{% endhint %}

For example, if you set:

* &#x20;Display If rules in "URLs & Events" AND&#x20;
* On Page Behavior rules AND
* Run dates AND
* CRM targeting rules

then they survey will only display if ALL condition types are met (i.e. the survey will not display if any one of the conditions are met. If the URL matches display if rules, but the current date is outside of the start/end date range set, then the survey will NOT display).&#x20;

{% hint style="info" %}
Please visit the "[Targeting](/best-practices/best-practices/targeting)" section of our Best Practices for our recommendations on targeting, or contact your Customer Success Manager for guidance.&#x20;
{% endhint %}


# Devices & Channels

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

By default, surveys are targeted to web browsers on all device types:

* Desktop
* Tablet
* Mobile Devices

To exclude a device type, simply click on the icon until it is greyed out.&#x20;

<figure><img src="/files/aHuP7ZvVMndMrxuaQD6X" alt=""><figcaption><p>Desktops will be eligible to see the survey, while tablet &#x26; mobile devices are excluded.</p></figcaption></figure>

{% hint style="info" %}
To target in native apps (iOS and Android) and for in-email surveys, please contact your Customer Success Manager for assistance.
{% endhint %}


# Sample Rate

The sample rate determines what percentage of impressions that match the eligibility conditions receive the survey

Surveys are set to 100% sample rate by default. To change the sample rate, enter a number between 1 and 100%.

<figure><img src="/files/GzGF51RUnvpOyMlrLiVB" alt="" width="563"><figcaption></figcaption></figure>

{% hint style="info" %}
Sample Rate is set to 100% by default.
{% endhint %}

#### **When to set the sample rate high vs as low as possible.**&#x20;

**High Sample Rate**

* You want to learn quickly.
* You want to learn quickly & iterate with a V2 survey.&#x20;
* You will only keep this survey up for a short amount of time.&#x20;
* You site has low volume, so you need a higher percentage of visitors to interact with the survey to get significant results.&#x20;
* You’ve chosen to use an inline widget, which looks like content on your page.&#x20;
* You want every visitor to interact with this survey.&#x20;

**Low Sample Rate**

* You have lots of time to collect results.&#x20;
* The volume on your site is very high, so results will come in quickly regardless of what percentage of guests see the survey.&#x20;
* You are creating an evergreen survey that runs on many pages and will exist for a long time.
* Your survey is an overlay and therefore the widget will inspire more impressions.
* You are very concerned about disrupting the visitor’s experience.&#x20;


# URL & Events

In the URL & Events section, you can set up targeting rules to determine where on your site or app the survey should display, and where it should not display.

<figure><img src="/files/aViHBgKImNVske4rO3oD" alt="" width="348"><figcaption></figcaption></figure>

## **Display If:**

Here you can determine which URLs the survey will be eligible to display on. Select from the dropdown one of the following options:

* **URL Contains** - the default and most frequently used option
* **Regex Matches** - Regular Expressions (Regex) is available to solve for advanced use cases for both browser-based and native application based use cases
* **URL is** - targets a specific URL
* **View Name Contains** - mostly used for native mobile apps; e.g., to target the Home page of the application
* **Regex View Name Matches** - Regular Expressions (Regex) is available to solve for advanced use cases for both browser-based and native application based use cases
* **Event Name Contains** - Using event names allows you to call a specific survey (or surveys, if A/B testing) with matching “event name contains” targeting to a specific page or after a particular user action (e.g. clicking on a button).<br>

Next, enter the URL of a page, View name, or Event name in the text field.

Click on “Add New” to add another URL/View Name/Event Name to the whitelist.&#x20;

Click the trash icon remove the targeting.&#x20;

{% hint style="info" %}
Display If rules are "OR" statements (not AND). If you have multiple display if rules, the survey is eligible to show on URLs that match any one of the set display if rules.&#x20;
{% endhint %}

**URL Contains Examples**:

<figure><img src="/files/MMRyXsilwEG5Vkx1m9HE" alt="" width="563"><figcaption><p>Example 1</p></figcaption></figure>

The survey with the targeting shown in Example 1 would display the survey on pulseinsights.com/pricing and pulseinsights.com/pricing/request.

<figure><img src="/files/59zFElvNyqoi1yWKLO7V" alt="" width="563"><figcaption><p>Example 2</p></figcaption></figure>

The survey with the targeting shown in Example 2 would display the survey on all pages of pulseinsights.com.

<figure><img src="/files/40mVNWm0AGslcx3YfdmR" alt="" width="563"><figcaption><p>Example 3</p></figcaption></figure>

The survey with the targeting shown in Example 3 would display on all pages of the console subdomain, but not on pulseinsights.com.

<figure><img src="/files/7eSWM5kVaHUf8M9ahP5y" alt="" width="563"><figcaption><p>Example 4</p></figcaption></figure>

A survey with URL Contains: `utm_source=sem` (as shown in Example 4)would display the survey for campaigns tagged with "sem".

**Regex Matches Example**:

<figure><img src="/files/s0RjCH25hhxgs5HwJN0b" alt="" width="563"><figcaption><p>Regex Example</p></figcaption></figure>

* Regex Matches `.*` (as shown in the Regex Example above) would display the survey on all pages where the Pulse Insights code snippet is present.

{% hint style="info" %}
Display If rules work in conjunction with the Pulse Insights tag. If the tag is not on a page, the survey will NOT be eligible to show, even if the Display If targeting rules are met.
{% endhint %}

## **Suppress If:**

While “Display Survey If” is a whitelist of URLs, View Names and/or Event Names, “Suppress If” is a blacklist.&#x20;

If a URL/View Name/Event Name matches the criteria established in this section, then the survey will *NOT* be eligible to render.&#x20;

The Suppress If fields work together with the Display If fields to determine which URLs the survey will fire on.&#x20;

The same options are available for suppressing as defined in the previous Display If section.<br>

<figure><img src="/files/3n3ERrmB9ttBRmLUzw8V" alt="" width="563"><figcaption><p>Suppress If Example</p></figcaption></figure>

For example, if Display If URL Contains: `pulseinsights.com` AND Suppress If URL Contains: `thank-you` the survey would display on all pages of pulseinsights.com EXCEPT those that contain thank-you in the URL.

Click on “Add New” to add another URL/View Name/Event Name to the suppression list.&#x20;

Click on the trash can icon to delete a Suppress If rule.<br>

{% hint style="info" %}
Similar to Display If rules, multiple rules within the Suppress If are OR rules. If the URL /Event Name/View Name matches *any one of* (not all of) the Suppress If rules, then the survey will NOT show.&#x20;
{% endhint %}

### **When to target “Run of Site” vs targeting a specific page or pages.**&#x20;

#### **Run of Site**

* You want to get a representative read of the site as a whole.
* You want to compare results across all pages.&#x20;
* If it is important for many visitors to see the survey. *‍*
* *To use an inline survey here, your tech team will need to create a container/div.*&#x20;

#### **A Group of Pages**

* You’d like a representative read across a subset of pages
* You want to compare results across all pages.&#x20;
* ‍*To use an inline survey here, your tech team will need to create a container/div.*&#x20;

#### **1 Specific Page**

* You want to understand the UX of a specific page
* You want to know more about the content on one specific page or part of a page.&#x20;
* You want to know about one piece of content or design & would like to put a survey right next to that piece of content. *‍*
* *Inline surveys must be targeted at one page at a time, and are best for asking about objects or content they are placed near.*&#x20;


# Dates

You can optionally set start dates/times and end start dates/times and the survey will only display to end users if the current date is between the established start and end dates.&#x20;

If no start date is specified, then the survey will be eligible to render once the status is turned to “Live”.&#x20;

If no end date is specified, then the survey will continue to be eligible until the submission goal is met, or if the status is changed to any status other than “Live”. &#x20;

{% hint style="info" %}
Dates & Times are displayed in your browser's local timezone.
{% endhint %}

<figure><img src="/files/M34IodkZhk6yWOE9EZqF" alt="" width="537"><figcaption></figcaption></figure>


# Previous Responses

You can ask follow-up questions to users who have given a specific answer to a survey in the past. This is a great way to dig deeper into the mindsets of your users and gather targeted feedback over time.<br>

Simply choose from the dropdown list of other surveys and select the desired previous answer. you’d like to target.

Once set, only respondents that answered the selected answer in a previous survey will be eligible to see and to answer this survey.&#x20;

&#x20;

<figure><img src="/files/M6xyLtt6EtxFTUB1Upgx" alt="" width="543"><figcaption></figcaption></figure>


# On Page Behavior

There are several page behaviors that you can target to trigger a survey to show, such as:&#x20;

{% hint style="info" %}
It is recommended that you only use one on page behavior trigger.
{% endhint %}

{% hint style="info" %}
If you’ve chosen an inline widget-type, you do not need to use On Page Behavior targeting because your survey will show on a specific part of the page.
{% endhint %}

{% hint style="warning" %}
Nerd Alert: On-page targeting works differently than other targeting categories under the hood. The impression is served before the on-page condition is met. If and when the on-page behavior is met (e.g., 50% scroll), it is rendered in the browser. If it is viewed by the user, it is also marked as a Viewed Impression.&#x20;

Consider this distinction when setting account-level impression frequency cap values, which are evaluated based on *Served* Impressions. Users can potentially meet the impression cap from impressions that aren't Viewed.&#x20;

For more information on impression frequency capping, see Global Targeting documentation [here](/configuring-pulse-insights-console/account-level-settings/global-targeting#user-level-frequency-capping).
{% endhint %}

## Time Delay

You can set a timed delay before your survey shows.&#x20;

**To set a time delay, check the checkbox for "Delay: Show after \[ ] seconds" and enter a number (in seconds) in the input field.**&#x20;

We recommend 5 seconds or less. On average visitors, spend about 5 seconds on a webpage, so we recommend keeping the time low.

Consider how your widget interacts with the user’s experience. For example, if you’ve chosen an inline format, you probably do not need to delay showing the survey. If you’ve chosen an overlay, you may want to give the visitor a few seconds to absorb your page’s content before triggering your survey.

## Scroll Delay

You can set a delay based on how far down the webpage a user scrolls.&#x20;

**Simply check the checkbox for "Scroll: show after user scrolls percent of page length" and enter a number percentage.**

We recommend using between 10 - 20% scroll to trigger your survey, unless you are hoping to trigger near a specific piece of content (in which case, you may want to consider [Content In View](#content-in-view) triggers instead). For example, perhaps you want to make sure someone read a piece of content that is about 20% down the page. Then we recommend setting scroll percentage at roughly 30%. You might consider how your widget interacts with the user’s experience. Inline widget types shouldn't have a scroll delay trigger since it will appear on a specific part of the page. &#x20;

## Exit Intent

Use Exit Intent targeting to rigger survey when user shows likely exit behavior (e.g. moving the mouse to exit the page).

Check the box for "Exit intent: show upon likely exit behavior"

{% hint style="info" %}
This targeting is only available for desktop only.&#x20;
{% endhint %}

## Upon Element Click

Use this to show your survey after user clicks on a particular element on the page (this is configured using CSS selectors).

## Content in View

show the survey after a particular element (CSS selector) scrolls into the viewport

## Text in View

show the survey when a particular element contains (or does not contain) particular text.

<figure><img src="/files/slwufoBdysdzXov3nmof" alt="" width="536"><figcaption></figcaption></figure>


# CRM Targeting

Custom data attribute targeting enables targeting surveys based values previously passed to Pulse Insights so you can ask questions only to a hyper-targeted segment of users. <br>

For example, if you pass loyalty points balance, you can target a question to users who have over, say, 50,000 points.<br>

Numerous options are available:

* **‘Equals’** is an exact match. E.g., ‘customerType equals member’ only matches users with that exact value, ‘member’, defined for ‘customerType’ attribute.
* **‘Does Not Equal’** matches users that do *not* match the value. E.g., the targeting ‘customerType does not equal member’ will match users with the values defined that do *not* exactly match ‘member’, such as ‘trial user’ or ‘nonmember’
* **‘Contains’** is a partial match. e.g., ‘locale contains en’ matches users with locale of ‘us-en’ and ‘uk-en’.
* **‘Does Not Contain’** will match any user whose defined value does *not* include the targeted value. E.g., ‘customerType does not contain member’ will match users with the values defined that does not contain ‘member’, such as ‘trial user’, but would not match ‘non\_member’, since that value contains ‘member’.&#x20;
* **‘Exists’** means that some value is defined. E.g., ‘loyaltyStatus exists’ would match users that have any value defined – say silver, gold, or platinum.
* **‘Does Not Exist’ means that the value is&#x20;*****not*****&#x20;defined. E.g., ‘loyaltyStatus does not exist’ would match users that do not have any value defined for that attribute.**&#x20;
* **‘Is Greater/Less Than’** evaluates the value defined and will match users with a value bigger/smaller than the targeted value. E.g., if ‘pointsBalance is greater than than 50000’ is the target, then a user with a pointsBalance of 50001 will be eligible to see the survey, but a user with a points value of 50000 will *not* be shown the survey. If the value is stored as a string, Pulse Insights will still attempt to evaluate it as a number.
* **‘Is Greater/Less Than or Equal to’** evaluates the value defined and will match users with a value bigger/smaller OR matching exactly than the targeted value. E.g., if ‘pointsBalance is greater than than 50000’ is the target, then a user with pointsBalance of 50000, or a user with a pointsValue of 50001 will both be eligible to see the survey.&#x20;

You can add multiple user attribute targeting rules by clicking on the “Add Another” button. To remove a rule, click on the X to the right of the row. <br>

* **All of:** If you have multiple rules and you’d like your target audience to match each rule, then use the **“**&#x41;ll o&#x66;**”**, which builds a block of condition statements joined by AND. E.g. a user must have a pointsBalance equal to 50000 AND have a defined customer Segment (customerSegment exists). The user must match every set of conditions you add to “All of” in order to be eligible for the survey.\
  ‍
* **Any one of**: If you have multiple rules and you’d like your target audience to match any one of the conditions, then use the “Any one of”, which builds a block of condition statements joined by OR. E.g. a user must have a loyaltyStatus of gold OR have a pointsValue less than 1000000 OR an undefined customerSegment (customerSegment does not exist). The user must match at least one, but *not ALL* of the set of conditions you add to “Any one of” in order to be eligible for the survey.<br>

**Client Key Required:** A Client Key is your anonymous userID that you pass to Pulse Insights to uniquely identify the user, E.g. customer ID, order ID, custom ID. Enable “Client Key Required” if you’d only like to show the survey if the user has a defined client key.

<figure><img src="/files/SunkMIcCLBE9BPLpRlVt" alt="" width="543"><figcaption></figcaption></figure>


# Geo Targeting

You can target surveys based on inferred geography from the user’s IP address. Geo targeting is available at the country, US state, and DMA level.<br>

You can add additional geo targeting rules by clicking on the “Add New” button. You can remove a rule by clicking on the trash can icon.

<figure><img src="/files/CFMMSnCw5eFwWCM8Tba7" alt="" width="537"><figcaption></figcaption></figure>


# Goal

Enter a number value in “Survey Goals” input box. This is the number of responses you would like to collect to feel confident that you have a representative set of answers to your question. Once the survey goal is met, then the survey will stop triggering. &#x20;

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

{% hint style="info" %}
The goal is set to 5,000 by default.
{% endhint %}


# User Behavior

You can target users based on their **session depth** (number of pageviews in the current session), and whether they are a **first time or repeat visitor**. Surveys are targeted to “All visitors” by default.&#x20;

<figure><img src="/files/0YY7BvnxLhpuP2MqtVon" alt="" width="530"><figcaption></figcaption></figure>

{% hint style="info" %}
Some browsers have a 'back forward cache' that stores the page as it was and displays it from cache (exactly as it was when you left it). In this case, our servers aren't being called and we aren't sending an incremental impression, but rather the visitor is returning to the page in its previous state.&#x20;
{% endhint %}


# Advanced Settings

* **Behavior on Close:** This option will prevent this particular survey from rendering again if a user actively closes it. This affects only the individual user that closed the survey. Other surveys will continue to render based on their targeting criteria.
* **Ignore Frequency Cap:** Account-level frequency caps are set in [Global targeting](/configuring-pulse-insights-console/account-level-settings/global-targeting). A particular survey can ignore the established frequency cap by enabling the “Ignore Frequency Cap” setting.&#x20;
* **Multiple Submissions:** This setting enables the survey to re-fire every *n* minutes/hours/days (choose from dropdown) after a user submits the survey (answers a question).

<figure><img src="/files/Tdpn1jDznYOu5jXjqgqB" alt="" width="546"><figcaption></figcaption></figure>

{% hint style="info" %}
Pleaser refer to the Best Practices guide for [Tips on Targeting](/best-practices/best-practices/targeting).
{% endhint %}


# Formatting

Formatting is how you configure the look and feel of your survey. The survey's design can impact user behavior, so it is important to format your surveys with results and response rates in mind.&#x20;

A survey's formatting of the following components, which together determines how the survey will look to the end-user:

* Widget type
* Themes
* Question Display&#x20;
* Custom survey-level CSS (optional)

### **Pulse Insights can match your theme to your website for you!** <a href="#match-your-theme-to-your-website.-pulse-can-do-this-for-you" id="match-your-theme-to-your-website.-pulse-can-do-this-for-you"></a>

Pulse Insights surveys are designed to be a native user-experience and to fit in with your site branding. Pulse Insights can customize colors, fonts, buttons and backgrounds via JSON “themes” so the formatting matches your brand.&#x20;

Pulse thinks ahead to include those things you may not consider, like accessibility and dynamic screen sizes.


# Widget Types

Pulse Insights surveys can display as:

* Docked
* Bottom Bar
* Top Bar
* Overlay&#x20;
* Inline

Decide if you’d like your survey to stand out or fit native content. Check out each type and determine which will work best for your goals!

{% hint style="info" %}
For tips on what widget type to use, visit our [Best Practices](/best-practices/best-practices/widget-types) page.
{% endhint %}


# Docked

## **Docked**

The Docked widget is similar to the [bottom bar](/configuring-pulse-insights-console/editor/formatting/widget-types/bottom-bar) widget, but only covers a portion of the webpage.

<figure><img src="/files/mb4yz1QAFZK9pcLOvViF" alt="" width="563"><figcaption></figcaption></figure>

{% hint style="info" %}
Available for Web implementations only.
{% endhint %}

Docked Widgets act as a middle ground, allowing you to collect data quickly without covering all the content on the page. They are great if you have content on the bottom of the page you’d like to keep in view.

Docked Widget can be placed horizontally along the bottom of the browser starting from the left or right edge, offset in pixels (px) of total width.

<figure><img src="/files/g5Hbb9orPkv6Sz9qL1ci" alt="" width="527"><figcaption></figcaption></figure>


# Bottom Bar

A Bottom Bar survey pops up over a thin portion of the bottom of your webpage or app until the user answers or exits.

<figure><img src="/files/dbAxFZqV6F2O36w9R2U1" alt="" width="563"><figcaption></figcaption></figure>

{% hint style="info" %}
Available for Web or App implementations. For App implementations, you can set the SDK widget height.
{% endhint %}

Bottom Bars act as a middle ground, allowing you to collect data quickly without covering all the content on the page.

<figure><img src="/files/xhQBKMn8MLKoUW5LIVYI" alt="" width="536"><figcaption></figcaption></figure>


# Top Bar

## **Top Bar**

The Top Bar widget type pops up over a thin portion of the top of your webpage or app until the user answers or exits.

<figure><img src="/files/Zc4k4FZA37ssmGXkHPCv" alt="" width="563"><figcaption></figcaption></figure>

{% hint style="info" %}
The Top Bar widget type is available for Web implementations only.&#x20;
{% endhint %}

Top Bars act as a middle ground, allowing you to collect data quickly without covering all the content on the page. They bring the eye to the top of the page.

You can optionally add a pusher so that the survey appears below the top navigation of your website.

<figure><img src="/files/oEw08fmDIuteP0Suzrlx" alt="" width="537"><figcaption></figcaption></figure>


# Overlay

The overlay widget type pops up over your web page or app until the user answers or exits. &#x20;

<figure><img src="/files/3nLVCMlKtlNrrSIVuong" alt="" width="563"><figcaption></figcaption></figure>

{% hint style="info" %}
The overlay is available for Web and/or App implementations.
{% endhint %}

Overlays are a great way to get data quickly or work well when the survey is triggered by a user’s actions (ex: the feedback tab).

You can set the margin of the widget as a percentage (%) of the full screen.&#x20;

<figure><img src="/files/34fcuTuNVWKBdl5Slo5K" alt="" width="528"><figcaption></figcaption></figure>


# Inline

The Inline widget type displays as an interactive object on your web page or app that disappears once the user answers or exits. &#x20;

<figure><img src="/files/5gk3ZVwyEMyXKXmF74oZ" alt="" width="563"><figcaption></figcaption></figure>

{% hint style="info" %}
Available for Web or App implementations.&#x20;
{% endhint %}

Inline surveys are great for asking about specific pieces of content on your page or if you hope not to disrupt the user’s experience. Users sometimes react negatively to popups, so if you have the volume, use inline surveys. For example, if you have 100,000 visitors a day and only need 500 submissions a day, use an inline or docked widget to keep the user experience seamless. Inline surveys work best when deployed on specific pages unless the site has a dedicated slot for Pulse surveys.

If you plan to show a survey in “inline” mode (within the content of the page, versus as an overlay on top of the page), then there are two available methods:

1. **Use Existing CSS Selectors** -&#x20;

<div align="center"><figure><img src="/files/wXOsF4C5iK1GRl7crVgw" alt="" width="375"><figcaption></figcaption></figure></div>

* Target - An html element, specified using CSS selectors
* Location - Determines how the survey is positioned in relation to the target

<figure><img src="/files/3G7iWeC6YQSUSJlbpOL7" alt="" width="357"><figcaption></figcaption></figure>

* Order within Target (if location is inside) - Positions the survey as the first or last element within the target
  * There is some overlap in the use cases for these different modes, but generally inserting inside a target is best used when you wish the survey to be contained visually / semantically inside a particular page element, whereas inserting as a sibling would be more useful if you need to place the survey at a particular index within a list of elements.

<figure><img src="/files/7P9PVRRU9Z2OONNWsJOx" alt=""><figcaption><p>Order within the target (if location is set to "Inside")</p></figcaption></figure>

2. **Blank Divs** - In certain cases (explained below), it's best to dedicate an html element to the survey. This may require working with the web team. Use a blank div if:&#x20;

* the survey is targeted to show across multiple pages and not all pages contain the same CSS selector&#x20;
* the structure of the page changes (e.g. different page content for customers vs. prospects)

{% hint style="info" %}
Please see our [technical documentation](/implementing-pulse-insights-dev/implementing-on-web-and-mobile-web/supporting-inline-surveys) for more details on supporting inline surveys.
{% endhint %}


# Themes

## Create & Manage Themes

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

You can create themes to customize colors, fonts, and backgrounds via JSON “themes” so the formatting matches your brand.&#x20;

To create an account-level theme, click on “Setup” in the top menu bar and select “Themes”. Then click the “New Theme” button in the top right corner. Name your theme, choose between CSS or Native JSON and enter your code within the text editor. To save, click the “Update” button in the bottom right.&#x20;

The Themes page will show all the themes you have associated with the account: the name of the theme, date and time when it was last edited, name of the person it was last edited by, and a list of all of the surveys that are using the theme.&#x20;

If you hover the cursor over the row, you will see the options to View, Edit, or Delete the theme.

## Assign a Theme to a Survey

Once you have created a theme, you can assign any theme in your account to a survey in the survey editor in the formatting right sidebar in the "Theme" section.&#x20;

<figure><img src="/files/pqsu06vH1HVI8zx6207W" alt="" width="563"><figcaption></figcaption></figure>


# Question Display

There are 2 options for how to display your survey. One question at a time, or all questions displayed at once. Surveys are displayed one question at a time by default. To configure question display, navigate to the Formatting tab of the right side panel in the survey editor. The settings will be located in the "Question Display" section of the formatting tab.&#x20;

## One at a Time

This is the default and most common display for survey questions. The user will be presented with one question at a time and proceed to the next question (if any) upon answer submission. You can also set the question order for one-at-a-time surveys by choosing one of the following from the dropdown menu:

* **Not randomized** (default): The order of the questions will display in the order in which you explicitly set in the editor. Use question routing to set the survey flow. For more details on routing, see [here](/configuring-pulse-insights-console/editor#routing).&#x20;
* **Randomized**: there is no question routing, the questions will display in random order when the survey is rendered for end users.

<figure><img src="/files/pedTutYNK43TZbwA0YoR" alt="" width="563"><figcaption></figcaption></figure>

## All at Once

All at once surveys are similar to a form where all questions in the survey will be shown at the same time with a button to submit all questions responses at once. If you choose to display your survey All-at-once, you can also configure:

* **Submit Button Text** (optional) - the button will default to "Submit" if this is left blank.
* **Enable Empty Error** (optional) - this feature enables error messages to display under each question that is unanswered (instead of just one error message displayed below the submit button). Each question's empty error message can be set in the individual question's settings. "Required" is the default error message if it is not customized in the question settings.&#x20;
* **Error Text** (optional) - this is the error message that displays below the submit button. The default error text is that will display if this is not set is "Please fill answers".
* **Question order**

  * Not Randomized (default): The questions within the form will show in the order in which they appear in the canvas, from top to bottom. To reorder the question order, simply drag and drop the question(s) in their desired location.
  * Randomized: The questions within the form will show in a randomized order when the survey is rendered for end users.

  <figure><img src="/files/gzTcnkZ4L17f2plXzttL" alt="" width="563"><figcaption></figcaption></figure>


# Custom CSS (Survey-level)

Survey-level Advanced Formatting enables full control of survey styling by adding custom CSS.

This feature is useful when used in conjunction with our [Themes](/configuring-pulse-insights-console/editor/formatting/themes) feature. You can apply small changes here without having to create and manage a whole new theme. This is useful for scenarios where you're using a theme, but need to adjust just a few parameters to make the survey look right for this context (e.g. you need to remove a close button for a theme that usually includes one).

Simply click "Edit CSS" in the Survey-level Advanced Formatting section of the right side panel Formatting tab to open the editor. Then, enter your custom CSS and hit "Save".&#x20;

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


# Supported Markdown

The following markdown options are available for survey question text and possible answer text for all question types.&#x20;

| Formatting  | Markdown                                                       | Result                           |
| ----------- | -------------------------------------------------------------- | -------------------------------- |
| Italic      | <p>Wrap text in underscores like: <br><code>*TEXT*</code> </p> | *TEXT*                           |
| Bold        | <p>Wrap text in asterisks like: <br><code>*TEXT*</code></p>    | **TEXT**                         |
| Superscript | <p>Wrap text in carets like:<br><code>^TEXT^</code></p>        | ![](/files/Tz2PtHR5aR1SOrYYZ3IW) |
| Subscript   | <p>Wrap text in tildes like:<br><code>~~TEXT~~</code></p>      | ![](/files/PxYUdZ0CZD1MlUgCep9h) |


# Link Builder

For situations where you can’t use the Pulse Insights code snippet to render surveys and collect data, you can use the Pulse Insights Survey Response API instead.

Pulse Insights integrates into email by placing clickthrough links that record the appropriate response along with other data such as the recipient’s userID. Then optionally, you can redirect the user to a page of your choice. If the page has a Pulse Insights tag, you can optionally collect additional information or just display a Thank You message that the response has been received.

The easiest way to get links is to create the survey/poll in the Console and then use the Link Builder tab to copy the clickthrough URLs.

While in the survey's Editor or Results page, click on the "**Link Builder**" tab at the top of the page.

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

Survey responses are passed in the following format: ‍&#x20;

```
//survey.pulseinsights.com/q/[question ID]/a/[answer ID]?identifier=PI-XXXXXXXX 
```

{% code title="For example:" %}

```
//survey.pulseinsights.com/q/1234/a/9876?identifier=PI-99999999
```

{% endcode %}

### Capturing Free Text Responses

You can use the `text=` parameter to capture free text responses.&#x20;

{% code title="Free Text Example:" %}

```
//survey.pulseinsights.com/q/9999?identifier=PI-81960884&text=this%20is%20a%20response 
```

{% endcode %}

### Redirecting The User To Another Page Post-Submit

Use the `redirect` parameter if you want to configure a custom redirect URL. By default, it will redirect to the referrer if there’s any, otherwise, it will just display a thank you message.&#x20;

{% code title="Redirect Example:" fullWidth="false" %}

```
//survey.pulseinsights.com/q/1234/a/9876?identifier=PI-99999999&redirect=https%3A%2F%2Fyoursite.com
```

{% endcode %}

{% hint style="info" %}
Note: special characters should be encoded in the redirect so portion of the URL as shown above.
{% endhint %}

{% hint style="warning" %}
The domain of the `redirect` URL must be whitelisted. This is configured in the Console's [Global Targeting](/configuring-pulse-insights-console/account-level-settings/global-targeting#redirect-domain-whitelist).&#x20;

To Configure: Click "Settings", then "Global Targeting", scroll to "Redirect Domain Whitelist" and enter the domain(s), 1 per line. Click "Update" to save.
{% endhint %}

### Saving Custom Data with Responses Via API

Any other query string parameter will be saved as custom data within Pulse Insights. This is often used to store things like:

* The recipients userID so you can tie responses back to an individual
* Details of the email campaign such as name, campaign date, or whether it’s a test or production email drop.

{% code title="Custom Data Example:" %}

```
//survey.pulseinsights.com/q/1234/a/9876?identifier=PI-99999999&userID=5555&locale=us 
```

{% endcode %}

### Testing Surveys In Draft Mode Via API

You can use `preview_mode=true` if you want to test draft surveys. //survey.pulseinsights.com/q/1665/a/9163?identifier=PI-81960852\&preview\_mode=true&#x20;

{% hint style="info" %}
Note: Expired or Paused surveys won’t be able to collect data via API and will show an error message if attempted.&#x20;
{% endhint %}

### Showing Poll Results From Poll In-Email

If you’re asking a question in-email and want to show the results upon answering, you can append: `pi_poll=true` to the URL.&#x20;

This will force Pulse Insights to show poll results for the question.&#x20;

{% hint style="info" %}
Note: polls results only work for the first single choice question within a survey.
{% endhint %}

## Pro Tips:

* If a survey/poll is only intended for email, make sure that the targeting is configured to prevent firing on web or mobile.&#x20;
* You can append `pi_present=[thank you message ID]` in the redirect URL to force a thank you message or follow-up questions to appear on click.

<br>


# Preview

There are several options for previewing your survey:

## In-Console Preview

Click on the <img src="/files/uBltzQ7oJv2PawKbE0jT" alt="" data-size="line">button in the bottom left to view your survey within the console editor.

This is a good preview option to use as you are making survey edits and want to quickly reference how your survey looks and flows.

## Live Preview

This is a more "true" preview as it renders the survey on your website and you fan see how it looks amongst the environment of the whole page.&#x20;

While in Live Preview mode, the survey displays surveys with a status of “Draft” for your browser, but other live users on your site will not be able to see the survey while in Draft mode.&#x20;

In Live Preview Mode, answers are not stored in your reporting, so you don’t need to manually remove any test responses. Non-production data is not sent to your other systems because custom data callback code does not execute in Live Preview mode.&#x20;

To view a survey in Live preview mode, two requirements must be met:

1. The Pulse Insights code snippet must be present on the page.
2. The survey in question must be configured to display on that page. The survey’s URL targeting must include the page that is being tested.

### From the Editor:

You can access Live Preview in our Console by clicking the <img src="/files/8lLBaCVFS2eHVXL7pY4Z" alt="" data-size="line">button in the bottom left of the editor.

Upon clicking Live Preview button, you’ll be asked for the URL you’d like to view. Click "Preview" and the URL you entered will open in a new tab and display the survey.

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

### From Your Website&#x20;

You can also turn Live Preview mode on by appending *?pi\_live\_preview=true* to any URL that contains the Pulse Insights code snippet.

You can turn off Live Preview Mode by appending *?pi\_live\_preview=false* to the URL.

{% hint style="info" %}
Your browser will remain in live preview mode until the browser is closed. We recommend previewing in an incognito window.
{% endhint %}

<br>


# Survey Groups (Localization)

Survey Groups allow you to create multiple similar surveys and organize them together.&#x20;

For example, if you want to create the same survey (with similar questions and branching) in other markets in a localized language, or if you’d like to run an A/B test and easily keep track and compare results, you can group all of the survey “variants” in a Survey Group.&#x20;

You can view results of each survey instance individually, and also see the aggregated results for the survey group as a collective whole.  <br>

To create a Survey Group, you first need to create a base survey. Create a survey as you normally would. After creating the first survey, you can create a survey group from the main dashboard page. The survey you originally created will be your “base” survey and will serve as the template for the other surveys you create in the group.

Hover on the survey in the survey index dashboard, click the dropdown menu and choose "Create Group"

<figure><img src="/files/Jf1SYM9tnQKJ15wAF6l6" alt="" width="515"><figcaption></figcaption></figure>

When you click “Create Group”, you will be prompted to name your survey group.&#x20;

<figure><img src="https://assets.website-files.com/62ae50311253ba87925cbbc9/63407f4db9d4ce96db970ea0_5oQH1jxvYhL87oCg1Rn0eKllBOmkRQGLZXUiLumupnTqgXEfW3gnGQWZP1FniC65E1fihR9jWHfTqGYRxPJBgZxKTSOLonKAAmPVPQLcUXBJzYfZkVb3jFnskMd4OGLB_jLUuqBj.png" alt=""><figcaption></figcaption></figure>

Once you click “Create”, then your new group will be created and you will be brought to the Bulk Editor where you can create additional variants of the base survey. <br>

### Bulk Editor

For an existing survey group, you can access the Bulk Editor via the Survey dashboard by hovering over the survey group name, clicking on the options menu and selecting "Bulk Editor". <br>

The Bulk Editor presents the survey attributes in a spreadsheet-like format, so that it is easier to make consistent changes across all surveys in the survey group. <br>

This view lists survey information, such as:

* General (survey name, status, goal)
* Widget type
* Targeting conditions
* Question type
* Question and answer copy
* Thank you message copy&#x20;

The first column consists of the row headlines (with short names/labels that are editable by double clicking on the value) and the base survey (the original survey you created and created a survey group from). The base survey column and the top row of survey names will be locked in view as you scroll (up/down/left/right) and edit so that you can easily reference the base survey and survey names while you are making edits to the survey duplicates. <br>

**To create a new survey variant:** click on the “+” button next to the base survey name. An exact copy of the survey will be created and its attributes will be listed in the next column of the spreadsheet-view. <br>

**To edit copy:** double click on the text input field, type the new copy, then hit the Enter key.

{% hint style="info" %}
Any changes made in the bulk editor are automatically saved (there is no "Save" button. Because of this, you cannot edit surveys with a "Live" status in the bulk editor. You must first change the survey's status from "Live" to any other status via the Status dropdown menu. We recommend QA-ing any changes before setting surveys live.
{% endhint %}

**To edit options** (such as status, widget type, theme, etc)**:** click on the dropdown menu and select another option.<br>

**Translations:** Enter the language code (see [here](http://www.lingoes.net/en/translator/langcode.htm) for ISO Language Codes) in the appropriate text field in the “General” section. When you enter your translated copy, hover over the globe icon to reveal a tooltip with the approximate English translation. This tool comes in handy when you are creating survey variants in different languages.

<figure><img src="https://assets.website-files.com/62ae50311253ba87925cbbc9/63407f4db9d4ce57d5970ef6_DwxXS4CR59OW6v6MTXrgtjWFg4IYwMaosctNapNkSS51u7PWtlzmceUVXcPMra1Ua5fLFbTi5Ugir4xo9rEdndGy3ZIauWspb06KU40twy8K9SRD5gDTphHEFoaRTG2telEIbZCU.png" alt=""><figcaption></figcaption></figure>

<figure><img src="https://assets.website-files.com/62ae50311253ba87925cbbc9/63407f4db9d4ce476b970eb8_wdvbbYLuAI9Hs5vRDdMeL09-TnUCmDMj0BYUaAOfQCQasUDc-mNxX86mb2ACYDnHXVjExl9gphQ4aJnEfIiwAZn95gFcEKLrRfwloigYEcjaSwY2Mo91f6i8qYENXMeHDi0x12mC.png" alt=""><figcaption></figcaption></figure>

**To add questions:** Scroll down to the bottom of the page and click on the “Add Question” button on the bottom left. This will trigger the “Add Question” modal where you can pick the question type and define the question copy and short name label. You can also configure additional options, which vary depending on the question type.

<figure><img src="https://assets.website-files.com/62ae50311253ba87925cbbc9/63407f4db9d4ce488e970eac_ue2Ho4dwiXZP3oDD64NMP12ceaFnxTfcI9xDCuqa95mzTL8_YziLLitpARJd7m-WGBiGMcZgUR_l25T7J2W5CU0T_1k_rw0FKnwNv0iISgu2b8JPAtwCAE_9RvH6S8eouM8_Eyn5.png" alt=""><figcaption></figcaption></figure>

{% hint style="info" %}
When you add a new question in the bulk editor, a new question will be added for ALL survey variants within the group.
{% endhint %}

**To branch/ask a followup question:** Double click on the short name question or answer in the first column. A modal will pop up where you can choose a followup question from the dropdown menu. In this modal, you can also change the base value and the short name. Then hit “Update”<br>

**To add an answer:** Click on the “+add answer” button in the first column.&#x20;

{% hint style="info" %}
This will add an answer for all survey variants.&#x20;
{% endhint %}

**To delete a question:** Double click on the question in the first column to trigger the “Edit Question” modal. Click “Destroy” to delete the question for *all surveys*.<br>

<figure><img src="https://assets.website-files.com/62ae50311253ba87925cbbc9/63407f4db9d4ceaccf970de4_3tAj6Aa9oF99wHGdMRVfNTsexXxmgx5MlpntM3Q2c_L-A3Yiw8p3tSzOtqdhalC8HX2wzvng-hcYhmpydKe4lbOA6P6Qg2lI0RVRFypUHUX4Mk1cEAN2L2JIF0MHFYSryi2Cl1C2.png" alt=""><figcaption></figcaption></figure>

**To edit a question:** You can also edit the base question copy and short name in the “Edit Question” modal, which you can open by double clicking the question in the first column. To ask a follow up question, select a question from the dropdown menu. Note, you will have to create the followup question before it will be included in the dropdown menu.<br>

**To delete an answer:** Double click on the short name answer in the first column to pull up the “Edit Possible Answer” modal. Click on the “Destroy” button to delete the answer for the base survey for all the survey variants.&#x20;

<figure><img src="https://assets.website-files.com/62ae50311253ba87925cbbc9/63407f4db9d4ced21a970e1d_qOzBKAhl9mJs5Wgq2tWwPxXyYhWgmtn6sx_oapJ16R1YlTzY582yMO42s0_ly_UZeUnL6krb74oLPCt2PYeAzl4uhqqP9rhRpipkvGIl42h3t8E04qrm1MJ2syM6K0LBTyVP_HK4.png" alt=""><figcaption></figcaption></figure>

{% hint style="info" %}
To help you keep track of any differences between survey (e.g. translated copy or survey settings), components of the survey variants that differ from the base survey will have an <img src="/files/B2j5CFWNBkRb5nYfTPtI" alt="" data-size="line"> icon to callout any differences.&#x20;
{% endhint %}

<figure><img src="/files/Z25cHPyPkkZ8jXFPp1E6" alt=""><figcaption><p>Example of the survey variant has a different value than the base survey with the informative icon to note a difference.</p></figcaption></figure>


# Reporting


# Results Page & Filtering

To view the results of a survey in the Console, hover over the survey name in the dashboard view, open the menu options and click “Results”.

<figure><img src="/files/MOpJpBgwQEMZWj0TXmcT" alt="" width="513"><figcaption></figcaption></figure>

The Results page shows aggregate survey metrics at the top of the page and results broken down by question.&#x20;

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

Aggregate survey metrics includes:

| Metric             | Definition                                                                                                                                                                                                                                                                                                                                                                                                                                                                               |
| ------------------ | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| Impressions        | How many times the survey was returned to be displayed on a page                                                                                                                                                                                                                                                                                                                                                                                                                         |
| Viewed Impressions | <p>Viewed impressions differ from regular impressions - this metric is how many times a survey was returned and seen by a user. </p><p></p><p>The viewed impressions metric takes into consideration whether or not the user has completed the action necessary (e.g. scroll, click, exit behavior, etc.) to actually see the survey. <br><br>Viewed Impressions are not enabled for all accounts. Please contact your Customer Success Manager to inquire about Viewed Impressions.</p> |
| Submissions        | How many times at least one question from the survey was answered.                                                                                                                                                                                                                                                                                                                                                                                                                       |
| Submission Rate    | <p>The rate of submissions per impressions. <br><br><em>Note</em>: <em>When viewed impressions are enabled, then viewed impressions are used in the submission rate calculation. Otherwise, regular impressions are used in the calculation.</em></p>                                                                                                                                                                                                                                    |
| Days Active        | The number of calendar days the survey has been live and collecting data. Changing the status resets this calculation.                                                                                                                                                                                                                                                                                                                                                                   |

On each of these summary stat tiles, you can see trend lines that show the trend of these metrics over time.

## Charts

The main area of the Results page displays a chart for each question in the survey. The question displays at the top of each "card" with the number of responses in parentheses. Each possible answer is displayed with a bar showing its share of the responses. Both the actual number of responses, as well as the % share for that answer compared to all possible answers for that question.&#x20;

Each question "card" also displays responses over time. You can hover over each section to see the answer, the amount of responses the answer received for that particular answer, the % share of total responses.&#x20;

The numbers at the top of each bar graph represent the total number of responses for that time.

The default time grouping is automatically selected based on the selected date range. You can choose from the following groupings:

* Day
* Week
* Month
* Quarter
* Year&#x20;

The default view is a stacked bar graph:

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

You can also view the data as a scaled bar graph:

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

Or as an area chart:

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

### Sorting Answers:

By default, the answers display by ascending order based on the answer ID (determined when the possible answer is created in the editor).

You can sort the answers in ascending or descending order by:

* Answer ID (Default)
* Alphabetical
* Number of Responses

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

### Changing the bar colors

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

### View Full Screen or Download Image

Click on the gear icon to view the full screen version of the question result graphs. You can also download the graphs as an image by selecting "Download Image".&#x20;

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

## Filtering Down Results

You can filter down results based on date range, device type, and completion URL. Simply make your selections and click "Apply Filter(s)" to reload the page with filtered down results.

<figure><img src="/files/aU7m0RNKFKB6SByaBkEN" alt="" width="375"><figcaption></figcaption></figure>

{% hint style="info" %}
Click "Apply Filter(s)" to reload the results with the filters you selected.&#x20;
{% endhint %}

### Date Range

The Results page shows All-time metrics by default, but you can also click to view results from the Last 30 day, the last 7 days, results from yesterday, from today, or choose a custom date range.&#x20;

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

### Device Type

All device types (Desktop/Tablet/Mobile Device) are included in the results by default.&#x20;

Click on a device-type icon to exclude it from your results. Device icons that are greyed out are deselected and will be excluded from the results.

<figure><img src="/files/FCb6DHU2j4kmhxlNybVK" alt=""><figcaption><p>Tablet and Mobile devices are excluded, while Desktop submissions are included in results.</p></figcaption></figure>

###

### Completion URL

You can also filter results by completion URL, which is the URL users completed the survey.&#x20;

You can use "Matches all of" or "Matches any one of" rules.&#x20;

Click "ADD NEW" to add a new filtering criteria.

From the dropdown select one of the following:

* URL contains
* URL does not contain
* URL Regex matches

Enter the URL/Regex in the text area.&#x20;

Click the trash can icon to remove.

<figure><img src="/files/9thdXryz3SF2a1QJfctV" alt="" width="375"><figcaption></figcaption></figure>

### By Answer

You can filter reporting by what people have answered to a specific question by clicking the any bar. All other questions will then update to reflect results for those who gave that answer.&#x20;


# On Demand

### Export Results

On the main Results page, click on the <img src="/files/M0RhM2tl0C5EboxSGe4h" alt="" data-size="line"> button to generate an XLSX file.

A modal will pop to show you the status of the download.

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

Once your report is reading you can click “Download the report” link to download the file. A copy of the report will also be sent to your email.

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

The export file contains the following report sheets:

* **Survey Metadata**: Survey name, author, reporting date range, date of report generation&#x20;
* **Aggregate results by day**: the following metrics aggregated by day:
  * Impressions
  * Viewed Impressions (if enabled)
  * Submissions
  * Submission Rate
* **Questions/Response Summary Report**: number of submissions per question and per response. This breakdown also shows the percentage (or share) that a particular response has in comparison to total responses.
* **Individual Rows:** Each row in this sheet is an individual response. If a survey has multiple questions, then each response will be displayed as its own row.&#x20;
* **Devices**: This sheet displays similar data to the Individual Rows sheet, but responses are grouped by device. So instead of each response displaying as its own individual row, the Devices tab groups all responses made from the same device. If a survey has multiple questions, all responses to the survey will display in one row for each device. &#x20;

{% hint style="info" %}
For definitions of each data point, please visit our [Data Dictionary](/configuring-pulse-insights-console/reporting/on-demand/columns-data-dictionary).&#x20;
{% endhint %}


# Columns/Data Dictionary

On demand reports contain the following data:

<table><thead><tr><th>Data</th><th width="272.3333333333333">Definition</th><th>Sheet</th></tr></thead><tbody><tr><td>Survey Name</td><td>The name of the survey included in the report.</td><td>Survey Metadata</td></tr><tr><td>Author</td><td>Name of the user that generated the report.</td><td>Survey Metadata</td></tr><tr><td>Reporting Dates</td><td>The date range included in the report.</td><td>Survey Metadata</td></tr><tr><td>Report Generated</td><td>Date when the report was generated.</td><td>Survey Metadata</td></tr><tr><td>Date</td><td>Date of activity.</td><td>Aggregate Results by Day</td></tr><tr><td>Impressions</td><td>Number of times the survey was returned to be displayed on a page.<br><br>Impressions are used in the aggregate Submission Rate if viewed impressions are NOT enabled for the entirety of the report date range.</td><td>Aggregate Results by Day</td></tr><tr><td><p>Viewed Impressions </p><p><em>(if feature is enabled)</em></p></td><td>Number of times a survey was returned and seen by a user.<br><br>Viewed Impressions are used in the aggregate Submission Rate calculation if enabled for the entire report date range.</td><td>Aggregate Results by Day</td></tr><tr><td><p>Blended Impressions </p><p><em>(if Viewed Impressions are enabled for a portion, but not all of the date range)</em></p></td><td><p>Blended impressions combine regular and viewed impressions for a date range when the Viewed Impression feature was not enabled for the entirety of that range. </p><p></p><p>The "Blended" total is used in the aggregate Submission Rate calculation for the date range.</p></td><td>Aggregate Results by Day</td></tr><tr><td>Submissions</td><td>Number of times at least one question from the survey was answered</td><td>Aggregate Results by Day</td></tr><tr><td>Submission Rate</td><td><ul><li><strong>submissions/impressions</strong> <em>(if viewed impressions are not enabled for report date range)</em></li><li><strong>submissions/viewed impressions</strong> <br><em>(if enabled for full report date range)</em></li><li><strong>submissions/blended impressions</strong> <br><em>(if viewed impressions are enabled for only part of the report date range)</em></li></ul></td><td>Aggregate Results by Day</td></tr><tr><td>Questions &#x26; Possible Answers</td><td>Question and response text that is displayed to the user.</td><td>Questions </td></tr><tr><td>Responses</td><td>The number of submissions per question and per response.</td><td>Questions</td></tr><tr><td>Share</td><td>The percentage (or share) that a particular response has in comparison to total responses.</td><td>Questions</td></tr><tr><td>Date</td><td>Date of submission.</td><td><p>Individual Rows</p><p>Devices</p></td></tr><tr><td>Time</td><td>Time of submission.</td><td><p>Individual Rows</p><p>Devices</p></td></tr><tr><td><p>Survey Group Name </p><p>(<em>only applies to surveys in a Survey Group)</em></p></td><td>The name given to the group of surveys.</td><td><p>Individual Rows</p><p>Devices</p></td></tr><tr><td>Survey Name</td><td>The name given to the sets of questions. The name given to the Survey ID.</td><td><p>Individual Rows</p><p>Devices</p></td></tr><tr><td>Question</td><td>Question text that is displayed to the user.</td><td><p>Individual Rows</p><p>Devices</p></td></tr><tr><td>Response</td><td>Text version of the user response.</td><td><p>Individual Rows</p><p>Devices</p></td></tr><tr><td><p>Question Base </p><p><em>(only applies to surveys in a Survey Group)</em></p></td><td>The base value/short hand name given for the question for survey groups.</td><td><p>Individual Rows</p><p>Devices</p></td></tr><tr><td><p>Response Base </p><p><em>(only applies to surveys in a Survey Group)</em></p></td><td>The base value/short hand name given for the response for survey groups.</td><td><p>Individual Rows</p><p>Devices</p></td></tr><tr><td>Translated Free Text Response</td><td>The English translation of a user's open ended feedback.</td><td>Individual Rows</td></tr><tr><td>Tags</td><td>Relevant to Open-Ended responses, and manually created by users in Pulse Insights reporting page</td><td>Individual Rows</td></tr><tr><td><p>Language Code </p><p><em>(only applies to surveys in a Survey Group)</em></p></td><td>The language code applied to a localized survey. </td><td>Individual Rows</td></tr><tr><td><p>Locale Code </p><p><em>(only applies to surveys in a Survey Group)</em></p></td><td>The locale code applied to a localized survey.</td><td>Individual Rows</td></tr><tr><td>Survey Group ID<br><em>(only applies to surveys in a Survey Group)</em></td><td>ID representing the sets of surveys grouped in a survey group. </td><td>Individual Rows<br>Devices</td></tr><tr><td>Response Group ID<br><em>(only applies to surveys in a Survey Group)</em></td><td>ID represents each user response.</td><td>Individual Rows<br>Devices</td></tr><tr><td>Next Question Group ID<br><em>(only applies to surveys in a Survey Group)</em></td><td>If surveys have multiple questions, this represents the ID of the question group that could be shown next. </td><td>Individual Rows</td></tr><tr><td>Survey ID</td><td>Sets of questions are grouped in each survey. This survey ID represents the survey</td><td><p>Individual Rows</p><p>Devices</p></td></tr><tr><td>Question ID</td><td>ID representing each question that is being displayed.</td><td><p>Individual Rows</p><p>Devices</p></td></tr><tr><td>Response ID</td><td>ID represents each user response</td><td><p>Individual Rows</p><p>Devices</p></td></tr><tr><td>Next Question ID</td><td>If surveys have multiple questions, this represents next question that could be shown. </td><td>Individual Rows</td></tr><tr><td>Pageview Count</td><td>Number of pages viewed by the user.</td><td><p>Individual Rows</p><p>Devices</p></td></tr><tr><td>Visit Count</td><td>Number of visits.</td><td><p>Individual Rows</p><p>Devices</p></td></tr><tr><td>IP Address</td><td>The IP Address of the user. </td><td><p>Individual Rows</p><p>Devices</p></td></tr><tr><td>Device Type</td><td>Device type that is assigned by Pulse Insights (e.g. desktop, mobile, tablet).</td><td><p>Individual Rows</p><p>Devices</p></td></tr><tr><td>Device UDID</td><td>ID assigned to each user based on the device they used. This is assigned by Pulse Insights</td><td><p>Individual Rows</p><p>Devices</p></td></tr><tr><td>Client Key</td><td>A persistent, anonymous, and unique User ID that you assign to a user. The value is typically passed to Pulse Insights upon an authentication event and used to tie a response back to an individual or to tie multiple devices/browers together. See <a href="/pages/pFY929Nl9LVGD2V71Lng">Client Key</a> for more details.</td><td><p>Individual Rows</p><p>Devices</p></td></tr><tr><td>Completion URL</td><td>URL that the survey was taken on if web. Native mobile, API/email responses, and Dynamic Email responses don’t include this value.</td><td><p>Individual Rows</p><p>Devices</p></td></tr><tr><td>View Name</td><td>For native mobile/SDK-based responses, the View Name is the equivalent of a Page or Screen name in web-based apps. It is defined by the app developers and typically the same value that gets passed to SDK-based analytics packages as the Page Name.</td><td><p>Individual Rows</p><p>Devices</p></td></tr><tr><td>Event</td><td>Optional value that tells Pulse Insights what occurred to trigger a survey. It is captured via <code>pi('present', 'alias');</code><br><br>Please refer <a href="/pages/6AEki9arEr8txd7G6bPE#by-using-a-present-alias">here</a> for more details on presenting specific surveys. </td><td><p>Individual Rows</p><p>Devices</p></td></tr><tr><td>Context Data</td><td>Context Data is meant to provide additional details about the user’s current context that typically isn’t immediately observable from the page or screen itself. For example, the category of product the user is viewing or the variant of an A/B test that a user was sorted into. It is explicitly passed to Pulse Insights via JavaScript or API methods during implementation.</td><td><p>Individual Rows</p><p>Devices</p></td></tr><tr><td>Device Data</td><td>Device Data is meant to provide additional details about the device (which is often a proxy for the user) that persist across multiple pageviews and sessions. For example, a customer’s loyalty/membership tier, internal model segmentation value or score, or Persistent IDs from other services work well as device data. Device data is expected to change infrequently (since it describes the customer/device, not the current context). Device Data is explicitly passed to Pulse Insights via JavaScript or API methods during implementation.</td><td><p>Individual Rows</p><p>Devices</p></td></tr><tr><td>Previous Surveys</td><td>null of 0 if user is taking survey for the first time, if not count of surveys previously taken</td><td>Individual Rows</td></tr><tr><td>Sentiment Score</td><td>The result of Google’s NLP API for open-ended/free text responses. Score ranges between -1.0 (negative) and 1.0 (positive) and corresponds to the overall emotional leaning of the text</td><td><p>Individual Rows</p><p>Devices</p></td></tr><tr><td>Sentiment Magnitude</td><td>The result of Google’s NLP API for open-ended/free text responses. Magnitude indicates the overall strength of emotion (both positive and negative) within the given text, between 0.0 and +inf. Unlike score, magnitude is not normalized; each expression of emotion within the text (both positive and negative) contributes to the text's magnitude (so longer text blocks may have greater magnitudes).</td><td><p>Individual Rows</p><p>Devices</p></td></tr><tr><td>Entity</td><td>The result of Google’s NLP API for open-ended/free text responses. Entity Analysis inspects the given text for known entities (proper nouns such as public figures, landmarks, etc.), and returns information about those entities</td><td><p>Individual Rows</p><p>Devices</p></td></tr><tr><td>OS</td><td>The operating system the user was using when responding to the survey. </td><td><p>Individual Rows</p><p>Devices</p></td></tr><tr><td>Browser</td><td>The browser the user was using when responding to the survey.</td><td><p>Individual Rows</p><p>Devices</p></td></tr><tr><td>Browser Version</td><td>The version of the browser the user was using when responding to the survey. </td><td><p>Individual Rows</p><p>Devices</p></td></tr><tr><td>Channel</td><td><p>Mapped based on the type of response: Web/Browser, Mobile SDK, Direct Submission API/Link, or Dynamic Email. </p><p></p><p><em>Note that traditional email survey responses use Direct Submissions (Links), so appears in reporting as such while Dynamic Email utilities its own API to classify it as such.</em> </p></td><td><p>Individual Rows</p><p>Devices</p></td></tr></tbody></table>


# Scheduled Reports

You can also send survey results right to your email inbox. The email with show aggregate metrics, as well as charts. The email also contains a link to download an Excel file of results.

## Setting Up Scheduled Reports

There are 2 ways to set up a scheduled report.&#x20;

### From the Name Menu dropdown:

* Click on the name menu dropdown
* Choose “Scheduled Reports”.&#x20;
* Click on the “New Report” button.&#x20;
* Give your report a name
* Select which survey(s) you would like to include
* Select your desired frequency from the dropdown. You can choose from:
  * Daily
  * Weekly
  * Biweekly
  * Monthly
* Select the start & end dates (optional)
* Select the email recipient(s).&#x20;
  * You can add email addresses that are not associated with the account (and thus not listed by default) by clicking on “New Email” and typing the email address in the text field.&#x20;
* Click “Save”

### From the Results Page

While on the results page for a survey (or survey group), the right sidebar has a panel for filtering and for "Scheduling".&#x20;

* Navigate to a results page for a survey (or survey group) by clicking "Results"
  * via the triple dot menu on the Survey Index Dashboard page
  * via the "Results" link at the top of the Survey Editor
* Click on "Scheduling", located in the right sidebar
* The "Scheduling" panel will display any existing scheduled reports that contain the survey you are reviewing results for.
* To create a new scheduled report, click the "Schedule a Report" button
* Give your report a name
* Select which survey(s) you would like to include
* Select your desired frequency from the dropdown. You can choose from:
  * Daily
  * Weekly
  * Biweekly
  * Monthly
* Select the start & end dates (optional)
* Select the email recipient(s).&#x20;
  * You can add email addresses that are not associated with the account (and thus not listed by default) by clicking on “New Email” and typing the email address in the text field.&#x20;
* Click “Save”

## Managing Scheduled Reports

The Scheduled Report page shows an index of all existing scheduled reports. Each row shows:

* The report name
* Scheduled frequency and start/end dates&#x20;
* Date & Time of when the next report is scheduled to send
  * Paused reports will say "Paused" in the "Next Report" column
* Name of the survey(s) included in the report
  * Note: click on the name of the survey to open up the survey's Editor
* List of recipients

Hover on a scheduled report to Edit, Pause/Restart, or delete a scheduled report.&#x20;

Click "New Report" to set up a new scheduled report.

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


# Free Text

**Free text responses** are displayed as list of the most recent responses (up to 100).&#x20;

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

To see all responses, click on "View All Response". You can tag and download responses and associated data points. Once tagged, you can also display a chart that shows the frequency of each tag.&#x20;

{% hint style="info" %}
Please see [Responses & Tagging](/configuring-pulse-insights-console/reporting/free-text/responses-and-tagging) for more details.
{% endhint %}

If enabled, you can also use our AI Generated Summary feature to get a paragraph summarization of responses.&#x20;

{% hint style="info" %}
Please see [AI Generated Summary ](/configuring-pulse-insights-console/reporting/free-text/ai-generated-summary)for more details.&#x20;
{% endhint %}


# AI Generated Summary

Introducing our latest survey analysis tool: AI-generated summaries!

As the volume of free-text responses grows, understanding and distilling insights become increasingly challenging. We're thrilled to unveil a reporting feature that leverages cutting-edge AI to provide concise paragraph summaries of free-text feedback.

You can now effortlessly grasp the essence of the most recent responses directly on the survey Results page. A simple click generates a comprehensive summary within seconds.

This tool also comes in handy for summarizing responses across different markets. The AI Summary tool quickly summarizes non-English responses into clear, concise English summaries. Elevate your survey analysis with this game-changing feature and unlock unparalleled insights effortlessly!

### To Generate a Summary:

1. Navigate to the Results page of a survey that includes a Free Text question-type.
2. Scroll down to the free text question you would like to summarize.
3. If the feature is enabled for your account, you should see a sparkles button: <img src="/files/iZCZcTdDs6cF7rL9TScf" alt="" data-size="line">
4. Click on the button and then the AI-generated summary paragraph will appear!&#x20;

The summary will stay there if you navigate away and come back later, and will persist until you generate a new summary to replace it. The AI summary tool can even summarize non-English responses into an English summary!

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

{% hint style="info" %}
Please contact your CSM to learn more and to enable this feature!
{% endhint %}

You can read our statement on AI and Ethics [here](https://www.pulseinsights.com/policies/ai).


# Responses & Tagging

## Free Text Viewer

For a more in depth analysis of free text responses, click on the “Text Responses” link in the bottom left.&#x20;

Clicking this link displays individual responses in a table format where you can see the date & time, completion URL, device type, response, translation (when applicable and language code is established upon survey creation), tags and sentiment score.

The data table is sortable by clicking a column header.

You can also filter results by typing in the filter field at the top of each column.

To **filter responses** simply type in the filter field at the top of the column you would like to filter.

The data table also enables you to **group responses** so you can view the data in ways that highlight similarities, differences, and insights. For example, you can group the responses based on

* How the user answered some other question.
* The URL the user answered the survey on (only for browser-based responses; native mobile and API responses won’t have a submission URL)
* The device type (phone, tablet, and desktop)

<figure><img src="https://assets.website-files.com/62ae50311253ba87925cbbc9/63407f4db9d4ceb07b970e97_PMWsasbVFky71ACDclLN0NF2qrWskHjez8dSyserJfP2wQHzfJ3w4kYbZRaETjiN0Y1z2d8ASC4FLpMzFbPrja_BomacPf78DQP5rwvdBzTvFE17CxDLAQSwcLoerVfCzI29KQni.png" alt=""><figcaption></figcaption></figure>

## Tagging

You can also **tag free text responses.** When you have thousands of free text responses, it’s not easy to distill it into digestible learnings. And even if you could do that, it’s not easy to retain perspective about how common certain themes are. This is where our response tagging comes in.<br>

### Manually Applying Tags

To apply one or more tags to a response:

1. Filter by relevant keyword by typing in the filter field at the top of “Tags” column
2. Using the checkbox in the leftmost column, select all responses as a starting point; but unchecking any responses that don’t fit&#x20;
3. Apply the tag by choosing an option in the “Select tag to add” dropdown menu. To create a new tag, click “Manage Tags” in the dropdown menu. Then click “New Tag” and you can name your new tag and apply a tag color. &#x20;
4. You can remove a tag by clicking the “X” on the tag

<figure><img src="https://assets.website-files.com/62ae50311253ba87925cbbc9/63407f4db9d4ce8928970dc8_vWQTYRpfB4C5TAFBF5DkmFnGcPtTZkzR4uc3n6_mlHnseT-k3W27WIywAWXeeJRprr7CzxfUikgls5fBDETtKndDoeoviDo7Cfmjm3OP4aniLQZDjAoHDNwviLzLZsX9n02phWGw.png" alt=""><figcaption></figcaption></figure>

<figure><img src="https://assets.website-files.com/62ae50311253ba87925cbbc9/63407f4db9d4ce1a3e970edc_KgEjJcgXElt9JTiWE1ji_DWKYVqr9njqCaDInqBKqhVH_pjjNO-1QXZR_I2_cEcG9xKUcEqNsAnjouGJj3Dxg-H342ZW_SMB6au3uTU7lduxbzdNRKKa5p5sItgdW-Kumd3jfccf.png" alt=""><figcaption></figcaption></figure>

<figure><img src="https://assets.website-files.com/62ae50311253ba87925cbbc9/63407f4db9d4ce81d4970dfe_U2XevaOoa5bZnWRNdu4OqG8IBhmSvTYV5uNMtj7NWYA6pH-Hwv41pTVumpdMWIxSjNEZVwwjDU8ueOPpXzVQC761cKJSXTlCSiZJhn_RbMjVa0j9Aq7kbXxKytRRzCqXyQ9zJD7F.png" alt=""><figcaption></figcaption></figure>

We’ve found that even large datasets with thousands of responses can be fully tagged quickly. \
The general results page will show a chart that graphs the frequency of occurrence of each tag in descending order, thus helping you digest what people think even though they submitted nuanced and complex open-ended responses.&#x20;

### AutoTag

After you have created your tag labels and manually tagged a few responses for each tag type, you can AutoTag the rest and turn on AutoTag for any new responses that come in.&#x20;

{% hint style="info" %}
This feature must be enabled by Pulse Insights for your account. For more details see [here](/configuring-pulse-insights-console/account-level-settings/configured-by-pulse-insights).&#x20;
{% endhint %}

You can read our statement on AI and Ethics [here](https://www.pulseinsights.com/policies/ai).


# Custom Content Reporting

Pulse Insights can turn on Custom Content link click tracking for surveys that have [Custom Content](/configuring-pulse-insights-console/editor/question-types/custom-content-next-best-action) with embedded links.

If this feature is enabled for the account, the Results page for surveys with Custom Content links will display the number of clicks for each embedded URL and the % share each link received.&#x20;

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

{% hint style="info" %}
This feature is [configured by Pulse Insights](/configuring-pulse-insights-console/account-level-settings/configured-by-pulse-insights). Please contact your Customer Success Manager if you would like to enable Custom Content click tracking for your account.
{% endhint %}


# Viewable Impressions

Viewed impressions differ from regular impressions - this metric is how many times a survey was returned and seen by a user.&#x20;

For surveys with display triggers (such as Page Behavior targeting - display after *n* seconds on page, after user scrolls *n%* of page, after user clicks on a certain element, etc.), sometimes a survey is returned and eligible to show (an impression), but the user does not complete the action required to trigger the survey.&#x20;

The viewed impressions metric takes into consideration whether or not the user has completed the action necessary (e.g. scroll, click, exit behavior, etc.) to actually see the survey.&#x20;

Viewed Impressions are used to calculate Submission Rate on days when the feature was enabled for the entire day, otherwise regular Impressions are used.&#x20;

Blended impressions combine regular and viewed impressions for a date range when the Viewed Impression feature was not enabled for the entirety of that range. The "Blended" total is used in the aggregate Submission Rate calculation for the date range.

If your survey is an inline widget, or if there are display triggers, you may want to consider enabling Viewed Impressions for your account.&#x20;

{% hint style="info" %}
This feature is [configured by Pulse Insights](/configuring-pulse-insights-console/account-level-settings/configured-by-pulse-insights). For more details on Viewable Impressions, or if you'd like to enable viewable impressions for your account, please contact your Customer Success Manager (CSM).&#x20;
{% endhint %}


# Account Level Settings

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

There is a “Setup” dropdown in the top navigation. From here you can choose the following:

* **Get Code Snippet** This is your unique code snippet for your Pulse Insights implementation. See implementation documentation [here](/implementing-pulse-insights-dev/implementing-in-email#implement-tag).
* **Global Targeting** to manage impression frequency caps and IP suppression.&#x20;
* **Data & Integrations** Enable and manage survey callback code snippets: impression callback, viewed impression callback, Onanswer callback, Onclose callback and Oncomplete callback. See more information [here](/implementing-pulse-insights-dev/implementing-on-web-and-mobile-web/callbacks).
* **Data Restrictions** to manage data masking.
* **Themes** allow you to customize colors, fonts, and backgrounds via JSON “themes” so the formatting matches your brand.
* **Automations & Events**
* **Activity Log** to view a running log of all account changes, the time and date of the change, and the user who made the change.
* **User Management** to manage the users who have access to your Pulse Insights account, invite users, and assign access level. See the [User Management](/configuring-pulse-insights-console/account-setup/inviting-collaborators) section for more details.&#x20;
* **Support** - If you need help, please contact <support@pulseinsights.com>.


# Get Code Snippet

**Get Code Snippet** This is your unique code snippet for your Pulse Insights implementation. See implementation documentation [here](/implementing-pulse-insights-dev/implementing-in-email#implement-tag).

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


# Global Targeting

## User-level Frequency Capping

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

You can enable user-level **frequency capping** to restrict the number of times a single individual is shown a survey. You can set the maximum number of impressions and the period for which the user won’t exceed the max number.&#x20;

Check the box and then enter the number of maximum impressions to show and the number of days, hours or minutes (select time interval via the dropdown menu).&#x20;

At the end of the period, the counter resets and the user will be eligible to see survey impressions again.&#x20;

If you'd like a specific survey to ignore the frequency capping rules set at the account-level, you can check "Ignore frequency cap" in the survey's targeting configuration (in the "Advanced Settings" section). Please see our [Targeting](/configuring-pulse-insights-console/editor/targeting/advanced-settings) section for more details.

{% hint style="info" %}
Frequency capping is based on Served Impressions, not Viewed Impressions. If a survey is served, but isn't viewed due to unmet targeting conditions, the served impression still counts towards the cap.
{% endhint %}

##

## How does Frequency Capping work in conjunction with Client Key in various scenarios?

**Assumptions for this table:**

1. Client Key is populated (e.g., upon login or on each pageview once the user was identified)
2. Frequency capping is turned on with a max of 1 impression per 7 days<br>

<table data-full-width="false"><thead><tr><th>Scenario</th><th>Description</th><th>Behavior &#x26; Explanation</th></tr></thead><tbody><tr><td><p><strong>Single User, Single Browser/Profile, But Two Accounts/Login IDs</strong></p><p></p><p><img src="/files/ZHs9S2fCl5K8cCIbT7TD" alt=""></p><p></p><p></p></td><td><ul><li><p>User logs into Account 1</p><ul><li>Device UDID is set to <code>ABC</code></li><li>Client Key is set to <code>1234</code></li><li>User is served an impression.</li></ul></li><li><p>User subsequently logs into Account 2 within the 7-day frequency cap period.</p><ul><li>Device UDID is still <code>ABC</code> (same browser profile)</li><li>Client Key is set to <code>5678</code> (second account/login id)</li></ul></li></ul></td><td><p>The user <strong>is not eligible</strong> to be served another impression within the 7-day period, even with a second login/id.</p><p></p><p>The frequency cap considers both Client Key and Device UDID. Since the Device UDID has already been served an impression, no further impressions are allowed until the cap resets.<br></p></td></tr><tr><td><strong>Single User, Two Devices, Two Accounts/Login ID:</strong><br><img src="/files/CIGi9GiWjBQuKtsfn7MV" alt=""></td><td><ul><li><p>User logs into Account 1 with Device 1</p><ul><li>Device UDID is set to <code>ABC</code></li><li>Client Key is set to <code>1234</code></li><li>User is served an impression.</li></ul></li><li><p>User subsequently logs into Account 2 with Device 2</p><ul><li>Device UDID is set to <code>DEF</code></li><li>Client key is set <code>5678</code> </li></ul></li></ul></td><td><p>On the second login (different device, different account), the user <strong>is eligible</strong> to be served a second impression.</p><p></p><p>Because the user has two different client keys (1234 vs. 5678) <strong>and</strong> two different Device UDIDs (ABC vs DEF), the user is eligible to receive a second impression, even within the 7-day frequency cap.<br></p></td></tr><tr><td><p><strong>Single User, Two Browsers/Profiles, Single  Account/Login ID:</strong></p><p><img src="/files/SPZI2VhjSfZqrCIKZgCY" alt=""></p></td><td><ul><li><p>User logs into Account 1 on Device 1</p><ul><li>Device UDID is set to <code>ABC</code></li><li>Client Key is set to <code>1234</code></li><li>User is served an impression </li></ul></li><li><p>User subsequently logs into Account 1 on Device 2</p><ul><li>Device UDID is set to <code>DEF</code></li><li>Client Key is set to <code>1234</code></li></ul></li></ul></td><td><p>On the second login (different device), the user <strong>will not be eligible</strong> to be served an impression. <br></p><p>The user has already met the frequency cap. The frequency cap is enforced because the Client Key remains the same across both devices, even though the Device UDID is different.</p></td></tr><tr><td><p><strong>Single User, Two Separate Pulse Insights Platform Accounts (e.g., To Manage Multiple Websites Within A Single Company):</strong> </p><p><img src="/files/tg77NMnTmCgUD3uCBVDI" alt=""></p></td><td><ul><li><p>User 1 logs into Site A (Pulse Insights Console Account A).</p><ul><li>Device UDID is set to <code>ABC</code></li><li>Client Key is set to <code>1234</code></li><li>User is served an impression </li></ul></li><li><p>User 1 logs into Site B (Pulse Insights Console Account B).</p><ul><li>Device UDID is set to <code>XYZ</code></li><li>Client Key is set <code>9876</code></li><li>User is served an impression </li></ul></li></ul></td><td><p>On the second login (different website, different console account, different UDIDs, different client keys), the user <strong>will be eligible</strong> to be served an impression. </p><p></p><p>Two separate console accounts have independent frequency cap settings and evaluations. Two separate websites will assign two separate Device UDIDs to the user. Two separate accounts/Login IDs will have two separate Client Keys for the user.</p></td></tr><tr><td><p><strong>Single User with Long Time on Page Targeting Criteria Set:</strong></p><p><img src="/files/6IK6vqQMmUwvZBUvosYu" alt=""></p></td><td><p></p><ul><li><p>User 1 logs in and is eligible for the survey but <em>does not meet the time-on-page requirement</em>.</p><ul><li>Device UDID is set to <code>ABC</code></li><li>Client Key is set to <code>1234</code></li><li>User is served an impression on page load.</li><li>Because the user didn’t meet the time requirements, the user does not see the survey. </li></ul></li></ul></td><td><p>User 1 logs in again within the 7-day window. On the second login, the user <strong>will not be eligible</strong> to be served an impression. <br></p><p>Because the user has met the frequency cap already, the user will not be eligible for a second impression until the period resets. Frequency caps are based on served impressions, which means that the user can meet the cap even if the user didn’t see the impression.</p></td></tr><tr><td><p><strong>Two Users, Shared Device:</strong></p><p><img src="/files/yS2IwM9tQKxBqviv3oFq" alt=""></p></td><td><p></p><ul><li><p>User logs into Account 1 on Device 1</p><ul><li>Device UDID is set to <code>ABC</code></li><li>Client Key is set to <code>1234</code></li><li>User is served an impression </li></ul></li><li><p>User 2 logs into Account 2 on the same device (including browser profile)</p><ul><li>Device UDID remains <code>ABC</code></li><li>Client Key is set to <code>5678</code></li></ul></li></ul></td><td><p>On the second login (same device), User 2 <strong>will not be eligible</strong> for an impression on that device.<br></p><p>The user has already met the frequency cap. Because frequency capping evaluates both Client Key and Device UDID (<code>ABC</code>, which is the same across both devices), the user is ineligible to receive a second impression within the 7-day period.</p></td></tr></tbody></table>

## IP Suppression

You can also create a list of **IP addresses** to block on your account. This feature is typically used if you don’t want internal employees of your company answering surveys.&#x20;

Pulse Insights will prevent Live surveys from displaying on those IPs for any survey in Live status. Draft surveys can still display while in Preview Mode so you can still QA surveys.

## Redirect Domain Whitelist

If you are using direct submission links and redirecting the user to a landing page (e.g. for surveys in an email), then you must whitelist the domain of the landing page here.&#x20;

1. Type in the domain(s) you wish to whitelist (1 per row)
2. Click "Update"


# Data & Integrations (Callbacks)

## Integrating with Other Services

Pulse Insights was built to easily integrate into other services. For example:

* You might want to push survey responses into Google Analytics or Adobe Analytics so you can add the missing context to traditional web analytics data
* If the survey is targeted to your customers, you might want to push results into your CRM system
* You may want to place the current user into a DMP segment or A/B Test segment based on what they answer
* Similarly, you might want to push preferences into your Personalization profile

{% hint style="info" %}
Because CRM setups tend to vary from client to client, CRM integrations are configured and managed by Pulse Insights Tech Ops. Get in touch with your Customer Success Manager (CSM) if you need to add or make changes to your CRM integration.
{% endhint %}

Pulse Insights supports the following integration methods:

* Real-time API call upon question submissions
* Hourly/daily feed placed on client’s or Pulse Insights’ sftp server
* JavaScript callouts on question submissions

## Callbacks

Under the "Setup" dropdown menu, you’ll find the **Data & Integrations** page with the following callback code hooks:&#x20;

### **Impression Callback**&#x20;

Impression callbacks are executed when the survey has an impression.

You can use the `pi('set_context_data', object);` to save context data along with the survey results.\
The object can be a javascript object, arrays, string or integers size limit is 1000 characters once serialized into JSON.\
\
Examples:\
`pi('set_context_data', {gender: 'male', age: 32, locale: 'en-US'});`\
`pi('set_context_data', 'christmas_promotion');`

### **Viewed impression Callback**

&#x20;(Only available if "Viewed Impression" feature is enabled for your account). This callback is executed as soon as the survey is viewed by the user.

### **Onanswer Callback**

This code snippet will be executed after each answer submission (after submitting but right before the /answer HTTP call).

\
The `survey` object gives you access to all the data related to the survey and the `question` object the answered question.\
Also, an `answer` object gives you access to the last answer submitted and will be formated as the following:\
\
Single choice question: `{ id: the_possible_answer_id, content: 'asdf', next_question_id: 1234 }`\
Multiple choice question: `{ id: the_possible_answer_id, content: 'asdf', next_question_id: 1234 }`\
Free text question: `{ id: null, content: 'asdf', next_question_id: 1234 }`

### **Onclose Callback**

This code snippet will be executed when the survey is closed before all of its questions have been answered.

\
The `survey` object gives you access to all the data related to the survey.

### **Oncomplete callback**

This code snippet is executed after the survey submission and the `survey` object gives you access to all the data related to the survey and the submitted answers.

\
`survey.questions` returns all the details about the survey questions and `survey.answers` returns the submitted answers by the user.

\
In case of Onanswer Callback, `answer` and `question` objects representing the current answer and question will be also present.\
\
Example:\
`var firstQuestionContent = survey.questions[0].content;`\
`var firstAnswerContent = survey.answers[0].content;`\
`ga('send','hitType': 'event',`\
&#x20; `'eventCategory': 'survey',`\
&#x20; `'eventAction': 'response',`\
&#x20; `'eventLabel': firstQuestionContent,`\
&#x20; `'eventValue': firstAnswerContent`\
`});`

### Onclick callback

This code snippet is executed after an anchor tag within a [custom content ](/configuring-pulse-insights-console/editor/question-types/custom-content-next-best-action)question gets clicked.

This callback is only available to use when the account setting "[Custom Content Link Tracking](/configuring-pulse-insights-console/account-level-settings/configured-by-pulse-insights)" is enabled.&#x20;


# Data Restrictions

You can mask personal data, such as phone number and email address. If this setting is enabled, an error message will display when there is a masked value detected in a user's free-text response.

You can set data restrictions in the Pulse Insights Console by clicking on the <img src="/files/QCXJVDI5AOEdHuEOInsC" alt="" data-size="line"> menu and clicking “Data Restrictions”.  Then checking one or more of the following options:

* Masking enabled
* Phone number masked
* Email masked

Next, hit “Update” in the bottom right.

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

{% hint style="info" %}
Note: By default, personal data is allowed (masking is disabled) unless explicitly set in the Data Restrictions.
{% endhint %}

### Personal Information Detection & Error Messaging

Pulse Insights automatically monitors open-text responses in surveys to help prevent the collection of personally identifiable information (PII). If a response appears to include sensitive information, the user will see the following error message:

> **"Oops, looks like you are trying to submit personal information."**

This behavior is controlled at the account level via **Data Masking Settings**, and is enabled by default for all accounts with PII restrictions in place.

**Trigger Criteria**

The system triggers this error when open-text input contains patterns that match known PII formats. These include:

* **Email addresses**
* **Phone numbers**
* **Social Security Numbers (SSNs)** or similar government ID formats (U.S. or international)
* **Credit card numbers**
* **Driver’s license numbers**
* Any string containing a **large number of consecutive digits** (to detect structured numerical identifiers)

Detection is pattern-based and may vary slightly depending on regional formatting (e.g., U.S. vs EU identifiers), but it is primarily designed to catch sensitive data entry, not general personal information like names or dates.

**Customization**

The error message text can be customized for each free text question using the **Error Text** field in the Console. If no custom message is entered, the default system message will display.


# Themes

<figure><img src="/files/9MkLtvVXNqz8WvR1Sim2" alt=""><figcaption></figcaption></figure>

You can create themes to customize colors, fonts, and backgrounds via JSON “themes” so the formatting matches your brand.&#x20;

To create an account-level theme, click on “Setup” in the top menu bar and select “Themes”. Then click the “New Theme” button in the top right corner. Name your theme, choose between CSS or Native JSON and enter your code within the text editor.&#x20;

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

To save, click the “Update” button in the bottom right. The Themes page will show all the themes you have associated with the account: the name of the theme, date and time when it was last edited, name of the person it was last edited by, and a list of all of the surveys that are using the theme.&#x20;

If you hover the cursor over the row, you will see the options to View, Edit, or Delete the theme.

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


# Automations

## Overview

With Automations you can set up an action for specific conditions. For example, you may want to set up an email alert when a survey respondent indicate that they're frustrated or confused. Or maybe you want to see how suboptimal help content impact returns. The possibilities are endless! Using Automations, you can trigger an email or track an event whenever there's a page view or survey submission. &#x20;

## How to Set Up

* Click on the <img src="/files/krpysiWAMO44oomH3MyU" alt="" data-size="line">dropdown menu in the top nav.&#x20;
* Select "Automations"
* Click the <img src="/files/Jd5bVYv3hq5QxQfnzLvS" alt="" data-size="line">button
* Fill out the details for your new automation:
  * Name & Status (this is where you can turn your automation on/off)
  * Condition type:&#x20;
    * upon survey submission: select a question from the dropdown of Live survey questions, and type the criteria in the text input area. Every time a user answers the particular question with an answer containing the specified text, the automation conditions are met and the specified action will occur.&#x20;
    * upon pageview/Pulse Insights tag initialization: If the user visits a URL that Is/Contains/Regex Matches (choose from dropdown) a URL (enter URL or regex in the text area).&#x20;
  * Actions: What should happen when the set conditions are met? You can choose to send an email, or [Track an Event](/configuring-pulse-insights-console/account-level-settings/automations/high-value-actions-events).

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

## Index

The Automations Index is where you can view all of the automations that have been set up for your account. From here you can create new automations, and view, edit, or delete existing automations. The index lists the name of each automation, the status (on/off), the number of times the automation has been triggered, the date and time of the last time conditions were met and the action was triggered, and the action type (send email or track event).&#x20;

To edit an automation, simply hover over the automation name in the Index, and select "Edit". From here you can turn the Automation Off/On, edit the name, conditions, and actions.

To delete an automation, simply hover over the automation name in the Index, and select "Delete".

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


# High Value Actions (Events)

## High Value Actions

Most websites and apps have actions that marketers and product owners want to drive, like submitting a lead form, buying something, downloading something, or enrolling in a newsletter. We call these events High Value Actions (HVAs).\
‍\
Pulse Insights can track these High Value Action events directly and correlate them with user responses, right from within our platform.

Pulse Insights already captures vast data on what is inside users' heads as they progress through their customer journey, such as:&#x20;

* Are they finding the information they need to make a purchase decision?&#x20;
* What audience(s) do they identify as?&#x20;
* Are they satisfied? ‍&#x20;

Our High Value Actions functionality enables you to **correlate this qualitative data with any of the quantitative/behavioral counterparts** that we capture in the platform, on-demand.

For example, you might learn:

* &#x20;How missing product information impacts conversion
* What is our conversion rate by self-reported funnel stage?
* What is our conversion rate by each self-reported audience segment?
* How does suboptimal help content impact returns?
* How does brand affinity correlate with conversions?
* The possibilities are endless!

## Create an Event

Pulse Insights can watch for a particular URL pattern that signifies that a user performed a High Value Action. For example, if a user lands on a URL containing `/thank-you/`, it might mean they purchased something.

To set up an event in the Pulse Insights Console:

* Click on the <img src="/files/NdJqxLK7o2pxh3I3d4S5" alt="" data-size="line">dropdown menu in the top nav.&#x20;
* Select "Automations"
* Click the <img src="/files/p53rebLRErqjqCcCzqkh" alt="" data-size="line">button
* Fill out the details for your new automation:
  * Name & Status (this is where you can turn your automation on/off)
  * Condition type:&#x20;
    * upon survey submission: select a question from the dropdown of Live survey questions, and type the criteria in the text input area. Every time a user answers the particular question with an answer containing the specified text, the automation conditions are met and the specified action will occur.&#x20;
    * upon pageview/Pulse Insights tag initialization: If the user visits a URL that Is/Contains/Regex Matches (choose from dropdown) a URL (enter URL or regex in the text area).&#x20;
  * Actions: Select the "Track an Event" option from the Action Type dropdown menu. Give you event a name and event properties.

<figure><img src="/files/BcLHZY4a5AwxEBwGKdTi" alt="" width="563"><figcaption></figcaption></figure>

Or you can have your technology team use our JavaScript library to inform Pulse Insights explicitly about the High Value Action.

## View Existing Events

To view events that have already been set up for your account:&#x20;

* Click on the <img src="/files/UWgrsbDjDj70BtQwE7jn" alt="" data-size="line">dropdown menu in the top nav
* Select "Events"
* You will see the Events index, which displays:
  * the Event name
  * Count: the number of times the event has occurred
  * Latest: the date and time of the last time event has occurred
  * Action: click "Delete all" to delete all tracked events.


# Activity Log

This page shows a running log of all account changes, the time and date of the change, and the user who made the change. &#x20;

The Activity Log tracks:

* Account changes: This includes account create date and details
* User changes: This encompasses activity such as user invitations and logins&#x20;
* Survey changes: This includes things like survey creation, deletion, edits and status changes

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

To navigate to this page, simply click on the Settings dropdown menu in the top navigation bar and choose "Activity Log".&#x20;

Additionally, you can view recent activity for a particular survey by going in the editor, clicking the "General" tab in the right side panel. The last few changes are displayed in the "Audit Log" section.

<figure><img src="/files/Zs2JQMowwZc6CZdUUPcM" alt="" width="375"><figcaption></figcaption></figure>

Click the "More" button to see up to the last 10 changes. Click "See All" in the modal to see all changes in the Audit Log.&#x20;

<figure><img src="/files/1ypZZXGCbJt4azrbXOrd" alt="" width="375"><figcaption></figcaption></figure>


# Configured by Pulse Insights

There are more settings that you can ask your Customer Success Manager (CSM) about! Contact your CSM to learn more about and to configure settings such as:

* [Multi-Factor Authentication](/configuring-pulse-insights-console/account-setup/authentication-and-sso)
* [Viewed Impressions](/configuring-pulse-insights-console/reporting/viewable-impressions)
* [Tag Automation (AutoTag)](/configuring-pulse-insights-console/reporting/free-text/responses-and-tagging#autotag)
* [Custom Content Link Click Tracking](/configuring-pulse-insights-console/reporting/custom-content-reporting)
* [AI Generated Summary of Free Text Responses](/configuring-pulse-insights-console/reporting/free-text/ai-generated-summary)




---

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

