Qualtrics

Step-by-step guide to send your event data from RudderStack to Qualtrics.

Qualtrics is a popular survey software that lets you create intelligent, real-time user surveys. It lets you get cutting-edge insights into your customers and use them to boost your brand value.

RudderStack lets you configure Qualtrics as a destination to which you can send your event data directly.

Getting Started

Before configuring Qualtrics as a destination in RudderStack, verify if Qualtrics supports the source platform you are sending the events from. Refer to the following table:

Connection Mode

Web

Mobile

Server

Device mode

Supported

Supported

-

Cloud mode

-

-

-

To know more about the difference between Cloud mode and Device mode in RudderStack, read the RudderStack connection modes guide.

Once you have confirmed that the source platform supports sending events to Qualtrics, follow these steps:

Configuration Settings

To successfully configure Qualtrics as a destination, you will need to configure the following settings:

  • Project ID: Enter your Qualtrics Project ID here.

  • Brand ID: Enter your Qualtrics Brand ID here.

Refer to the FAQ section below for steps on how to get your Qualtrics Project ID and Brand ID.

  • Enable Generic Page Title: If this field is enabled, RudderStack sends every page call with the name Viewed a Page.

This field is useful only when using the page call.

If this option is disabled, RudderStack will search for the category and name of the page call and send the event as Viewed <category_field> <name_field> Page. If any of the two fields is absent, RudderStack sends the page call as Viewed <category_field>/<name_field> Page.

Adding device mode integration

iOS Android To add Qualtrics to your iOS project, follow these steps:

  • In your Podfile, add the Rudder-Qualtrics extension as shown:

    pod 'Rudder-Qualtrics'
  • After adding the dependency followed by a pod install command, add the following imports to your AppDelegate.m file:

    #import <Rudder/Rudder.h>
    #import <RudderQualtricsFactory.h>
    @import Qualtrics;
  • Then, add the initialization of your RSClient as shown:

    RSConfigBuilder *configBuilder = [[RSConfigBuilder alloc] init];
        [configBuilder withDataPlaneUrl:DATA_PLANE_URL];
        [configBuilder withFactory:[RudderQualtricsFactory instance]];
        [RSClient getInstance:<SOURCE_WRITE_KEY> config:[configBuilder build]];
  • Next, add the following snippet to display the qualified intercept on your ViewController:

    [Qualtrics.shared evaluateProjectWithCompletion:^(NSDictionary<NSString *,TargetingResult *>* targetingResults){
        for (NSString* interceptID in targetingResults) {
          TargetingResult *result = targetingResults[interceptID];
              if ([result passed]) {
                [[Qualtrics shared] displayWithViewController:self];
              }
        }
    }];

For more information, refer to the Qualtrics iOS documentation. Your Android project must be on version 5.0 (API level 21) or higher for RudderStack to be able to send events to Qualtrics.

Once confirmed, follow these steps to add Qualtrics to your Android project:

  • Open your app/build.gradle (Module: app) file and add the following under the dependencies section :

    implementation 'com.rudderstack.android.sdk:core:1.+'
    implementation 'com.rudderstack.android.integration:qualtrics:1.0.0'
    implementation 'com.google.code.gson:gson:2.8.6'
    
    // Qualtrics
    implementation 'com.qualtrics:digital:2.0.0'
  • Add a new Maven repository for the App Feedback package. Your allprojects section should appear as shown:

    allprojects {
        repositories {
            google()
            jcenter()
            maven {
                url "https://s3-us-west-2.amazonaws.com/si-mobile-sdks/android/"
            }
        }
    }
  • Open the AndroidManifest.xml file from the src/main folder in the project root and add the following XML snippet after the existing activity:

    <activity android:name=
        "com.qualtrics.digital.QualtricsSurveyActivity"/>
    <activity android:name=
        "com.qualtrics.digital.QualtricsPopOverActivity" 
              android:theme="@style/Qualtrics.Theme.Transparent"/>
  • Initialize the RudderStack SDK in your Application class' onCreate() method as shown:

    // initializing Rudder SDK
    val rudderClient = RudderClient.getInstance(
      this,
      <SOURCE_WRITE_KEY>,
      RudderConfig.Builder()
              .withDataPlaneUrl(DATA_PLANE_URL)
              .withFactory(QualtricsIntegrationFactory.FACTORY)
              .build()
    )
  • Add a MyCallback subclass. You need to implement a callback for the Qualtrics APIs. This will be used to call the displayIntercept() method based on the evaluateIntercept() result. A good place to add this callback is before the last closing brace (}) in your MainActivity.Java class. Add the following code:

    private class MyCallback implements IQualtricsProjectEvaluationCallback {
       @Override
       public void run(Map<String, TargetingResult> targetingResults) {
           for (Map.Entry<String,TargetingResult> result: targetingResults.entrySet())
               if (result.getValue().passed()) {
                   Qualtrics.instance().displayIntercept(MainActivity.this, result.getKey());
               }
       }
    }
  • Add the following snippet to display the qualified intercept in your activity class:

    Qualtrics.instance().evaluateProject(new MyCallback());

For more information, refer to the Qualtrics Android documentation.

In the iOS Device Mode implementation, even if the user qualifies for multiple intercepts, only one will be shown. Whereas in Android, all the intercepts for the user will be shown.

Page

The page call lets you record your website's page views with any additional relevant information about the viewed page.

RudderStack passes any tracked events as embedded data to the Qualtrics intercept target. After the page call, the Qualtrics survey is loaded.

You can set the intercepts when a user creates the project or after they have created the project.

A sample page call is as shown:

rudderanalytics.page("category", "name", {
  path: "path",
  url: "url",
  title: "title",
  search: "search",
  referrer: "referrer",
  testDimension: "true"
});

For the above example, The event will be sent as Viewed category name Page, if the Generic Page Title option is disabled in the RudderStack dashboard. If this option is enabled, the event will be sent as Viewed a Page.

If the category field is not mentioned in the page call but specified inside the properties, RudderStack still includes the field while sending the event. For example, refer to the following snippet:

rudderanalytics.page("name", {
  category: "category",
  path: "path",
  url: "url",
  title: "title",
  search: "search",
  referrer: "referrer",
  testDimension: "true"
});

For the above example, the event will be sent as Viewed category name Page, if the Generic Page Title option is disabled in the RudderStack dashboard. If it is enabled, the event will be sent as Viewed a Page.

If category is not specified in the event at all, RudderStack sends the event with only the page name, as shown below:

rudderanalytics.page("name", {
  path: "path",
  url: "url",
  title: "title",
  search: "search",
  referrer: "referrer",
  testDimension: "true"
});

For the above example, The event will be sent as Viewed name Page, if the Generic Page Title option is disabled in the RudderStack dashboard. If enabled, the event will be sent as Viewed a Page.

If both the name and category fields are absent in the page call and the Generic Page Title option is disabled, RudderStack will not send the event to Qualtrics.

Track

The track call lets you track how many times a user performs certain actions. RudderStack passes any tracked events as embedded data to the Qualtrics intercept target. After the track call, the Qualtrics survey is loaded.

At the destination end, i.e. Qualtrics, both page and track calls have the same functionality.

You can set the intercepts when a user creates the project or after they have created the project.

In this case, the value of event field of the track call will be used as the event name while sending it to Qualtrics.

A sample track call is as shown:

rudderanalytics.track("Test Event");

In the above example, the event will be sent to Qualtrics as Test Event.

Identify

The identify call is supported only in the mobile (Android and iOS) Device Mode integration.

When you make an identify call, RudderStack sets the user traits using:

  • The Qualtrics Properties class, setString, and setNumber API in case of Android, and

  • The setStringWithString and setNumberWithNumber API in case of iOS

These user traits can be used as custom properties while setting the Target Logic or Embedded Data for any intercept in your Qualtrics dashboard.

iOS Android

[[RSClient sharedInstance] identify:@"test_user_id"
        traits: @{ @"property_key": @"property_value" }];
MainApplication.rudderClient.identify(
    RudderTraits()
        .put("property_key", "property_value")
)

FAQ

How do I get my Project ID and Brand ID?

To get your Qualtrics Project ID and Brand ID, follow these steps:

  • Log into your Qualtrics account.

  • Click on the project you will be using.

  • Click on Settings tab, followed by Manage Project option (the right-most dropdown menu in the dashboard).

  • Click on Project ID's. Here you will find both your Project ID and Brand ID, as shown:

How do I know if the SDK has loaded successfully?

Once RudderStack loads the web SDK successfully, you will be able to see the survey options chosen in the Qualtrics dashboard, e.g., a survey button, survey form, etc.

An example is shown below:

In the mobile Device Mode integration, is it possible to manually set the logic?

Yes, you can manually set the logic using Qualtrics Properties class setString and setNumber API on Android and setStringWithString and setNumberWithNumber API on iOS. For more information, refer to the iOS documentation or the Android documentation, depending on your implementation.

Contact Us

For questions on any of the sections covered in this guide, feel free to contact us or start a conversation in our Slack community.

Last updated