Installing Pulse Insights Code Snippet

In order for surveys to display, you need your Pulse Insights code snippet placed on all pages that will collect feedback.

We recommend placing your Pulse Insights code snippet, found under the setup menu, just above the closing body of all pages of your entire site(s). The Pulse Insights code snippet also works well when deployed by a tag management system.

  • Your Pulse Insights snippet works across secure and non-secure pages
  • We recommend placing above the closing /body tag or configuring to fire after the page has loaded
  • We recommend placing your snippet on all pages of your site
  • You can deploy the Pulse Insights tag via any tag manager. Many have built-in templates for our tag.
  • The code snippet is asynchronous and won’t block the rest of the page from loading
  • The Pulse Insights JavaScript is loaded from a CDN so it is highly available and loads from a server close to the end user

Viewing All Surveys From Your Dashboard

Pulse Insights gives you an at-a-glance view of your surveys from your Survey Dashboard.

Key features of the Survey Dashboard include:

  • Survey name, which is a friendly name you give each survey but is not visible to end users.
  • Survey Status:
  • Draft: means not currently firing; used before a survey launches
  • Live: means it is firing for end users
  • Paused: means it is temporarily not firing for end users, but is expected to be turned back live
  • Complete: means the survey has reached either its goal or end date
  • Archived: means that it is complete and not actively being managed or analyzed
  • Impressions: shows many times the survey has been rendered to a page
  • Submissions: number of completed submissions. For surveys with follow-up questions, at least one question was answered.
  • Submission rate: submissions / impressions
  • Goal and Goal % Complete: number of submissions you’re targeting. Survey will stop displaying when the submissions goal is met.
  • Last submission: date and timestamp of the most recent survey submission (times are in GMT)
  • Last change: user and datestamp of the most recent edit to the survey

You can also create new surveys, edit/view existing surveys, delete surveys, toggle live/paused, and search surveys from the dashboard.

Creating A Survey

Creating a new survey consists of three key steps:

  1. Defining the basics like Survey Name and Submission Goal (General)
  2. Defining the questions and survey formatting
  3. Defining targeting conditions that define when survey will render to end users

Step 1: Defining The General Survey Options

Survey Name: We suggest structuring your naming conventions so that it remains easy to find surveys as your learning plan grows.

Survey Status:

  • Draft: means not currently firing; used before a survey launches
  • Live: means it is firing for end users
  • Paused: means it is temporarily not firing for end users, but is expected to be turned back live
  • Complete: means the survey has reached either its goal or end date
  • Archived: means that it is complete and not actively being looked at

Submissions Goal: the submissions goal represents how many responses you’d like to receive to feel confident that you have a representative set of answers to your question.

Step 2: Defining Questions & Formatting

On this tab, you define survey questions to ask, follow-up question logic, and how the survey is formatted for end users.

The page is divided into question definition (left) and formatting options (right).

Question Formatting

Invitation: an optional invitation enables users to opt-in to take a brief survey. Since Pulse Insights Surveys are often just one question long and used in-line, an invitation to take a survey is typically not necessary and is not used by default.

Question Types

Pulse Insights supports single answer, multiple answer, and free text questions. Pulse Insights also offers an add-on product, Concierge, which enables a rich & immersive custom response to a user’s selection. If available, this is configured using the Custom Content Card. When creating a new question, you can select the appropriate question type.

Select Question Type

Single Choice Questions:

Single choice questions mean that the user selects the single most appropriate answer from a list of options. Single choice answers are indicated via radio buttons or buttons.

Single Choice

To configure single choice questions: you can add responses options by clicking the “Add Response” button. And remove response options by clicking the X on the right of each line.

Single Choice Console

Note: all Pulse Insights fields support markdown as follows:

  • Bold is indicated by adding * asterisks * on either side of what you want to be bolded.
  • Italics is indicated by adding _underscores_ on either side of what you want to be italicized.

The Randomize Order of Responses option will display the possible answers in random order when the survey widget is rendered for end users. This can prevent biases related to the order of the options.


There are two settings:

  1. Randomize all response
  2. Randomize all except the last — this is useful if you have an ‘Other’ option that you want to remain last

Multi-Choice Questions:

Multi-Choice questions enable the user to select one or more responses at a time.

Checkbox Widget

Configuration of multi-choice questions in the console is nearly identical to configuring single-choice questions, except there is an option to configure the maximum number of checkboxes the user can select.

Multi-choice config

Free Text (Open-ended) Questions:

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 you’re asking more of the user.

  • Question is the label that is displayed above the input field.
  • Hint text is present in the input field until the user starts typing
  • Submit Label allows you to customize the text of the form’s submit button
  • Options
  • Height: defines how high the input field is to collect user feedback
  • Max length is the number of characters the user can use for a response

Free Text Widgets will render like so:

Related: see reporting for free text questions.

Custom Content:

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.

Custom Content Card

The Card Name is used only for reference so you know the content without having to open up the Custom Content Editor.


  • Full Screen take-over creates an overlay of the entire webpage if selected. If not selected, the custom content is displayed in the same widget container as the questions.
  • Background color and Opacity further help customize the look and feel of the content overlay
  • Auto-close after [N] seconds enables you to display custom content but then automatically have the experience return to what the user was doing. This is useful if you want to help the user but don’t want to require that the user interact with the content.
  • Auto-redirect to [URL] after [N] seconds — this is useful if the user can’t find what she is looking for. You can display some contextual content about where you are sending the user and then send the user automatically.

Managing Custom Content

Custom Content allows simple WYSIWYG editing or advanced HTML editing, complete with code beautification and line numbers.


If you upload images, they are hosted at our CDN, Cloudfront.

Custom Content supports executing JavaScript. This can be powerful, but with great power comes great responsibility. Improper usage could impact the entire webpage so use caution and follow proper QA processes before launching code into a production environment.

See question branching below to configure when Custom Content is displayed.

Follow-up Questions:

You can add multiple follow-up questions by clicking “Add Follow-up Question.” However, be careful! The reason why Pulse Insights surveys get high response rates and actionable insights is because questions are targeted and as easy to answer as they are to close. Use follow-up questions judiciously!

Question Branching

You can define the follow-up question by dragging and dropping from any response to any other follow-up question as shown above. In this case, if the user indicates that we didn’t do a great job of communicating differentiators on a page, we follow up by asking about what could have been done better.

If there isn’t a branching line drawn, the default next step is the “Thank You” message.

Thank You Message

The Thank You Message is displayed when a user completes a survey submission. It automatically closes after a few seconds so the end user can get back to business.

You can also optionally show the survey results to the end user, which turns a survey into a poll. Simply check the ‘show survey results’ checkbox on the Thank You card.

The Formatting Pane

The formatting pane is broken up into a handful of tabs including:

  • Widget Type
  • Widget Background
  • Question Formatting
  • Advanced Formatting

Pane: Widget Type

widget pane

There are four types of widget:

  1. Docked Widget displays the survey along the bottom of the browser on top of page content
  2. Inline displays the survey within the content of the page
  3. Top bar displays the survey docked along the top of the browser using the full width of the page. It can display on top of the page or can optionally push the page content down to accommodate the survey
  4. Bottom bar displays the the survey docked along the bottom of the browser using the full width of the page.
  5. Full screen display in an overlay of the entire page.

Note: on mobile phones, Pulse Insights over-rides these survey types and displays a more suitable overlay format to optimize the mobile user experience.

Placement Options

Some widget types have addition placement options:

  • Docked Widget can be placed horizontally along the bottom of the browser starting from the left or right edge, offset in pixels (px) or a percentage of total width.
  • Inline surveys are targeted to a particular CSS Selector. There is an option to place the survey at the beginning or end of div content. Additionally, there is an option to place the survey in a different div for mobile devices since sometimes mobile devices have a different page layout.
  • Note re: Inline Surveys: Pulse Insights will suppress survey rendering if the specified div is not found on the page. Since the page structure isn’t necessarily known at the time Pulse Insights selects an eligible survey, the CSS Selector defined in the survey is NOT considered targeting criteria for the purposes of eligibility.
  • Additionally, the survey can optionally be offset from the div in either % or px by using the top, bottom, left, and right offset options
  • Top bar has a pusher option. This option will push down the page contents instead of overlaying the page. However, it cannot push down fixed position content.

Pane: Widget Background

widget bg

Widget background allows for

  • Customization of width of docked widget style surveys in px or %
  • Customization of background color using hex value or color picker

Pane: Question Formatting

question formatting

Question Formatting allows for

  • Customization of the Question font color via a color picker or hex value
  • Customization of the Answer font color via a color picker or hex value

Survey-level Advanced Formatting


The Advanced Formatting pane enables full control of survey styling by adding custom CSS.

Survey-level advanced formatting is useful in conjunction with our Themes feature. If you’re using a theme but need to adjust just a few parameters to make the survey look right for this context (say you need to remove a close button for a theme that usually includes one), you can apply the changes here without having to create and manage a whole new theme.

Key CSS selectors are below but you can use browser developer tools to get the full inventory and style as needed.

Step 3: Targeting Conditions


Targeting Conditions determines under which circumstances the survey renders.

Dates: you can optionally set start dates/times and end start dates/times and the survey will only display to end users if between those dates

Display Survey If: determines which URLs the survey will display on. There are two options:

  • URL Contains is the default and most frequently used option
  • View name contains: is for native mobile apps; e.g., to target the Home page of the application
  • Regular Expressions (Regex) is available to solve for advanced use cases for both browser-based and native application based use cases

URL Contains Examples:

  • URL Contains pricing would display the survey on and
  • URL Contains would display the survey on all pages of
  • URL Contains would display the survey on all pages of the console subdomain
  • URL Contains utm_source=sem would display the survey for campaigns tagged with sem

Regex Matches Examples:

  • Regex Matches .* would display the survey on all pages where the Pulse Insights code snippet is present

Suppress If: The Suppress If fields work together with the Display If fields to determine which URLs the survey will fire on. Any “Suppress If” conditions that are satisfied prevent the survey from being displayed on those URLs.


  • Display If URL Contains and Suppress If URL Contains thank-you would display the survey on all pages of except those that contain thank-you in the URL.

Behavior Targeting: Enables targeting surveys based on the user’s behavior. For example, maybe you want to ask a question of a user only after viewing 3 pages on the site. Or maybe you only want to ask a particular question of only first-time visitors.

Device/User Custom Data (CRM) Targeting: Enables targeting surveys based values previously passed to Pulse Insights so you can ask questions only to a hyper-targeted segment of users.

For example, if you pass loyalty points balance, you can target a question to users who have over, say, 50,000 points.

Numerous options are available:
Equals is an exact match. e.g., ‘customerType equals member’ only matches users with that exact value of customerType.

Contains is a partial match. e.g., ‘locale contains en’ matches users with locale of us-en and uk-en.

Exists means that some value is defined. e.g., ‘loyaltyStatus exists’ would match users that have any value–say silver, gold, or platinum.

Is Greater/Less Than evaluates the value. e.g., ‘pointsBalance is greater than 50000’. If the value is stored as a string, Pulse Insights will still attempt to evaluate it as a number.

Targeting Based On User’s Previous Responses:

Previous Answer Targeting

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.

Geo-Targeting: You can target surveys based on inferred geography from the user’s IP address. Geotargeting is available at the country, state, and DMA level.

Sample Rate: Determines what percentage of impressions that match the eligibility conditions receive the survey; between 1 and 100%.

Devices: Enables device targeting so you can display the survey to mobile, tablet, and desktop devices independently.

Behavior On Close: This option will prevent this particular survey from rendering again if a user actively closes it. This affects only the user that closed the survey. Other surveys will continue to render based on their targeting criteria.

What if more than one survey is eligible for a given page?

If more than one survey selected (meaning the user is eligible on this page, after evaluating the sample rate probability), one will be chosen at random by Pulse Insights.

Global Targeting

Pulse Insights also offers global targeting that is applied to all live surveys.

User-level frequency caps:
If your organization is. running multiple surveys, perhaps because different groups want to learn at the same time, we offer frequency capping to ensure you don’t over-survey any single individual. You can set the maximum number of impressions and the period for which the user won’t exceed the max number. At the end of the period, the counter resets and the user will be eligible to see survey impressions again.

IP Address Restrictions:
This feature is typically used if you don’t want internal employees of your company answering surveys. Pulse Insights will prevent Live surveys from displaying on those IPs for any survey in Live status. Draft surveys can still display in while in Preview Mode so you can still QA surveys.

QAing Surveys With Live Preview

Pulse Insights offers a method to QA surveys before they go live to end users so that you can confirm they look great across browsers & devices.

You can access Live Preview from the top-right of the Edit Survey pages.

Screen Shot 2014-07-22 at 2.50.57 PM

Upon clicking Live Preview, you’ll be asked for the URL you’d like to view.

live preview

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.

While in Live Preview mode, the survey displays only draft surveys for your browser, but not for other live users. Also in Live Preview mode, answers are not stored in your reporting, so you don’t need to manually remove any test responses. Similarly, custom data callback code does not execute to prevent sending non-production data into other systems.

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
  3. For example: URL targeting must include the page that is being tested
  4. Note the two key exceptions:
  5. If the survey status is set to Draft, it will still display as this is the point of Live Preview!
  6. To prevent having to refresh more than once , the sample rate for draft surveys is temporarily set to 100%

Your browser will remain in live preview mode until the browser is closed. We recommend previewing in an incognito window.


Pulse Insights provides reporting via the User Interface and also enables exporting both summary and raw data for further analysis.


All counts are limited to the date range selected on the top-right of the reporting.

Impressions is how many times the survey was displayed.

Submissions is how many times at least one question from the survey was answered

Submission Rate is impressions / submissions

Days Active tells you the number of calendar days the survey has been live and collecting data. Changing the status resets this calculation.

On each of these summary stats, you can see sparklines that show the trend of these metrics over time.

Results are aggregated by question into total responses and share (%).

PRO TIP: You can click the number of responses in the top right in order to sort descending instead of the order defined in the console.

Filtering Reporting

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.

Filtered Reporting

Data Export

The data export link generated an XLSX file that includes additional details such as:

  • Aggregate results by day including impressions, submissions, and submission rate
  • Raw data including:
  • All survey question & response data
  • Date/Time stamp
  • IP address
  • Device ID (UDID)
  • Previous Surveys Answered
  • Browser
  • OS
  • Device Type (mobile, desktop, or tablet)
  • Visit count — the number of visits observed
  • Pageview count — the number of pageviews in current session at the time of submission
  • Context Data (aka Custom Data) — data describing the current context: e.g., data about the current page or activity
  • Device Custom Data — data describing the device and user
  • Client Key — your anonymous userID that you pass to Pulse Insights to uniquely identify the user
  • There are two variations of raw data: one uses one row per device (Devices tab) and one uses one row per response (Individual Rows tab)

Reporting On Free Text (Open-Ended) Questions

Free text reporting is displayed as a word cloud so that you can quickly digest large numbers of responses and grasp frequency of usage. Similar words are automatically combined to give more relevant responses. You can see verbatim responses by clicking any word in the word cloud.

Viewing Responses In A Data Table

Pulse Insights also can display individual responses in a table format by selecting “Text Responses” in the bottom left.

The data table is sortable in real-time by clicking a column header.

You can also filter results in real-time by typing in the filter field at the top of each column:

Grouping Responses

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)

Making Sense of 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.

It’s easy to apply one or more tags (aka labels, or meanings) to a response. The process most clients follow is typically to

1. Filter by relevant keyword

2. Select all responses as a starting point; but unselect any responses that don’t fit

3. Apply the tag.

We’ve found that even large datasets with thousands of responses can be fully tagged quickly. Once responses are tagged, we offer a new way to view the data:

We’ve found that even large datasets with thousands of responses can be fully tagged quickly. Once responses are tagged, we offer a new way to view the data:

This view 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. You can select among the three free text view by selecting options in the bottom left corner of the graph.

Inviting Users To Collaborate

Pulse Insights is inherently multi-user. To invite users to your Pulse Insights account, select User Management is under the Setup menu.

Simply enter an email address and click the invite button. She will receive an email with a unique token to finish setting up the account.

There are two role types–full access and reporting-only.

Reporting-only users have the following restrictions:

  • No ability to manage users
  • No ability to edit survey questions, formatting, or meta data
  • No ability to create or delete surveys
  • No ability to manage integrations

Also under User Management, you can see details of all the collaborators within an account.

Display A Specific Survey

On occasion, you may want to control when a specific survey displays instead of letting Pulse Insights evaluate eligibility.

To solve for this, we created JavaScript method to present a survey in real-time as follows:


Where 88 is the id of the survey, which you can find by using the URL Builder tab in the Console.

Please note that the survey might not render because the following rules are still evaluated:

In addition to the JavaScript method, you can also use a URL parameter to present a specific survey.

Append ?pi_present=[surveyid] to any URL. If a survey is in Draft status, you will also need to append pi_live_preview=true to set the browser in preview mode.

Capturing Additional Custom Data

You can capture custom data to be stored with Pulse Insights survey responses, which can give you additional information for targeting, analysis, or the ability to link to other data sets offline.

Pulse Insights has two types of Custom Data:

  1. CONTEXT DATA: Meant to provide additional details about the current context. For example, the category of product the user is viewing or the variant of an A/B test that a user was sorted into. Context data could potentially change from page to page and visit to visit.
  2. DEVICE DATA: 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 segmentation value, or internally modeled propensity scores would work well as device data. Device data is expected to change infrequently (since it describes the customer/device, not the current context).


  • Custom Data is useful for segmentation analysis (e.g. learning how satisfaction differs based on loyalty program level or tenure)
  • Both Context Data and Device Data is available to be passed to your other integration partners via callback code that executes on impression and answer.
  • You can target surveys based on queries of a user’s Device Data attributes (e.g., asking a question of any user who has more than 50,000 loyalty points)

Setting Context Data (aka Custom Data)

Use the following JavaScript method to set Context Data:

pi('set_custom_data', {a: 1,b: 2});
pi('set_custom_data', {cart_amount: 999, category: 'games'});

Pro Tips about using Context Data:

— You can set arbitrary names & values; you needn’t define or type what you are going to send in Pulse Insights first.

— Whatever is defined at the time the survey is answered by the end user will be captured by Pulse Insights and will show up in reporting.

— If you want to use the values in survey targeting in the current pageview, it needs to be defined before the pi(‘get’, surveys); line of our code snippet, which triggers evaluation of which surveys to display, if any.

— Context data remains with the user across pageviews in the current session.

— The Context Data Method (set_custom_data) overwrites any and all previous values.

Setting Device Data

Use the following JavaScript method to set device data:

pi('set_device_data', {product: 'gold', customerSegment: 'High Value'});

Integrating Survey Responses 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

Under Setup, you’ll find Data & Integrations.


There are two types of callback:

  1. Onanswer – executes when a user submits any question
  2. Oncomplete – executes when a user reaches the Thank You card or closes an incomplete survey.

When a user submits a survey, Pulse Insights will execute the JavaScript code in the input field. You can use the Pulse Insights JavaScript Object to pass the user’s answers and other dynamic data into other services such as web analytics. You can also, optionally, include your callback code directly in the page as follows:
OrNote: In Live Preview Mode, callbacks do not execute to prevent sending non-production data into other systems.

Using Polls & Surveys In Email

Use The Direct Submission API To Submit Responses

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 URL Builder tab to copy the clickthrough URLs.

Survey responses are passed in the following format:

//[question ID]/a/[answer ID]?identifier=PI-XXXXXXXX
For Example:
Capturing free text/open-ended responsesYou can use the text= parameter to capture free text responses.
where question ID 9999 is a free text question.Redirecting The User To Another Page Post-SubmitUse the `redirect` parameter if you want to configure a custom redirect URL. By default, it will redirect to the referer if there’s any, otherwise, it will just display a thank you message.

Note: special characters should be encoded in the redirect so portion of the URL as shown above.Saving Custom Data with Responses Via APIAny 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. Example:

Testing Surveys In Draft Mode Via APIYou can use `preview_mode=true` if you want to test draft surveys.
Note: Expired or Paused surveys won’t be able to collect data via API and will show an error message if attempted.Showing Poll Results From Poll In-EmailIf you’re asking a question in-email and want to show the results upon answering, you can append:

To the URL. This will force Pulse Insights to show poll results for the question. Note: polls results only work for the first single choice question within a survey.Pro Tips:1. If a survey/poll is only intended for email, make sure that the targeting is configured to prevent firing on web or mobile. 2. 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.

People-Based (vs. Device-Based) Surveys

If a user answers a survey on a work computer, you don’t want to ask the same user the same question again just because she is on her personal mobile device. Pulse Insights provides a method to:

  1. Link multiple devices deterministically
  2. Decision surveys based on who the person is instead of just the device

Linking Devices

To link devices, you need to inform Pulse Insights who the current user is by passing her client key. Client key is YOUR unique anonymous userID for the customer.

pi('identify_client', 'CLIENT_KEY');

You only need to do this once per device, typically on an authentication event.

Decisioning based on client key

Once a cross-device linkage is created, Pulse Insights can decision based on the person instead of just the device. If the client key is passed as a parameter of the /serve call, Pulse Insights will decision based on the client key instead of the device UDID.

  • If the person has already answered, she will not be asked again
  • Pulse Insights will consider properties of all devices in targeting criteria. For example, if you’d like to ask a question after a certain number of visits, Pulse Insights can consider visits across devices.

Reporting By Person Instead of Device

Client key is included as a column in reporting so you can easily pivot based on the person.

Progressive Profiling Engine

Common configuration differences with 360 Insights

— Because questions are targeted to specific individuals, using CRM targeting is commonly used to ask only the right people to update their profile information.
— Clients will need to push user attributes to Pulse Insights including the client_key described above and any other data or segments that will be used to determine eligibility.
— Questions can be channel-specific (e.g., only asking about mobile preferences in mobile channels) or cross-channel.

Integrating Pulse Insights data into CRMs

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 account team if you need to add or make changes to your CRM integration.

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