Skip to main content
RapidDev - Software Development Agency
retool-integrationsREST API Resource

How to Integrate Retool with Qualtrics

Connect Retool to Qualtrics by creating a REST API Resource with Qualtrics' API token sent as an X-API-TOKEN header. Use Qualtrics' REST API to build an enterprise research dashboard that manages surveys, exports response data, and combines survey results with internal customer records — giving research teams and ops staff direct data access without navigating Qualtrics' reporting UI.

What you'll learn

  • How to find your Qualtrics datacenter ID and generate an API token for Retool authentication
  • How to configure a Retool REST API Resource with the correct Qualtrics base URL and X-API-TOKEN header
  • How to query Qualtrics surveys, export response data, and track distribution status from Retool
  • How to use JavaScript transformers to reshape Qualtrics API responses for Retool Tables and Charts
  • How to combine Qualtrics survey data with internal customer records for enriched research dashboards
Book a free consultation
4.9Clutch rating
600+Happy partners
17+Countries served
190+Team members
Intermediate15 min read25 minutesOtherLast updated April 2026RapidDev Engineering Team
TL;DR

Connect Retool to Qualtrics by creating a REST API Resource with Qualtrics' API token sent as an X-API-TOKEN header. Use Qualtrics' REST API to build an enterprise research dashboard that manages surveys, exports response data, and combines survey results with internal customer records — giving research teams and ops staff direct data access without navigating Qualtrics' reporting UI.

Quick facts about this guide
FactValue
ToolQualtrics
CategoryOther
MethodREST API Resource
DifficultyIntermediate
Time required25 minutes
Last updatedApril 2026

Build a Qualtrics Enterprise Research Dashboard in Retool

Qualtrics is the enterprise standard for experience management research — customer satisfaction studies, NPS programs, employee engagement surveys, and academic research. While Qualtrics provides its own reporting and dashboard capabilities, research operations teams and customer insights managers often need to pull Qualtrics response data into custom dashboards that combine survey results with internal customer data, CRM records, or product usage metrics. Retool enables this through direct Qualtrics API access.

With a Retool-Qualtrics integration, your research and CX teams can view all active surveys with response counts and completion rates, export and browse response data filtered by date or demographic, monitor distribution status across email and panel sends, and join Qualtrics NPS responses with customer account data from your database — all in a single operational panel. This is particularly valuable for CX operations managers who need to surface insights for account teams without requiring everyone to have Qualtrics access.

Qualtrics' API is datacenter-specific — the base URL includes your organization's unique datacenter identifier (e.g., co1, ca1, eu). Finding your datacenter ID is the first step. Once configured, the API provides comprehensive access to survey management, response data exports, distribution tracking, and contact list management.

Integration method

REST API Resource

Qualtrics connects to Retool through a REST API Resource using an API token sent as the X-API-TOKEN request header. All requests are proxied server-side through Retool, keeping your API token secure. Qualtrics' API base URL is datacenter-specific (your org's datacenter determines the subdomain), so you must use your organization's unique base URL. You configure authentication and base URL once at the resource level, then build queries for survey management, response exports, and distribution tracking.

Prerequisites

  • A Qualtrics account with API access enabled (requires XM Platform license — Qualtrics Research Core or higher)
  • Your Qualtrics API token (Account Settings → Qualtrics IDs → API → Generate Token)
  • Your Qualtrics datacenter ID (visible in your Qualtrics login URL: yourorg.co1.qualtrics.com — the 'co1' part is the datacenter)
  • A Retool account with permission to create Resources
  • Survey IDs for the surveys you want to access (visible in Qualtrics under Survey Settings → Survey ID, or from the /surveys API list)

Step-by-step guide

1

Find your Qualtrics datacenter ID and generate an API token

Before configuring Retool, you need two pieces of information from your Qualtrics account: your API token and your datacenter ID. Both are required to construct the correct API base URL. To find your datacenter ID, log into Qualtrics and look at the URL in your browser. It will follow the pattern: yourorg.co1.qualtrics.com or yourorg.ca1.qualtrics.com. The portion between your org name and '.qualtrics.com' is your datacenter identifier (co1, ca1, eu, iad1, sjc1, etc.). Alternatively, navigate to Account Settings (click your profile icon in the top right → Account Settings). On the Qualtrics IDs page, look for the 'Datacenter ID' field — it shows the datacenter code directly. To generate an API token on the same Qualtrics IDs page, scroll to the API section and click 'Generate Token'. If a token already exists, you can view it or regenerate it. Copy the token string — it's a long alphanumeric value. Treat it like a password; it grants full API access to your Qualtrics account. Your Qualtrics API base URL will be: https://yourorg.co1.qualtrics.com/API/v3 — replace 'yourorg' with your organization's subdomain and 'co1' with your actual datacenter ID. Keep both the API token and base URL handy for the next step.

Pro tip: If you're unsure of your datacenter ID, the Qualtrics support team or your account administrator can confirm it. Using the wrong datacenter in the base URL returns a 404 error even with a valid API token, which can be confusing to debug.

Expected result: You have your Qualtrics API token and know your datacenter-specific base URL (e.g., https://yourorg.co1.qualtrics.com/API/v3). These are ready for Retool resource configuration.

2

Create a Qualtrics REST API Resource in Retool

Navigate to the Resources tab in your Retool instance and click Add Resource. Select REST API from the resource type list. Name the resource 'Qualtrics API'. In the Base URL field, enter your Qualtrics API base URL: https://yourorg.co1.qualtrics.com/API/v3. Replace 'yourorg' with your actual organization subdomain and 'co1' with your datacenter ID. Do not include a trailing slash. For authentication, Qualtrics uses a custom header called X-API-TOKEN (not the standard Authorization: Bearer format). In the Headers section, click Add Header and enter: - Key: X-API-TOKEN - Value: your Qualtrics API token For better security, store your API token in a Retool configuration variable first: go to Settings → Configuration Variables, create a variable named QUALTRICS_API_TOKEN, mark it as Secret, and then in the header value field use {{ retoolContext.configVars.QUALTRICS_API_TOKEN }} instead of the raw token value. Add a second header for content type: key = Content-Type, value = application/json. This ensures POST and PUT request bodies are interpreted correctly. Click Save Changes. To test the connection, create a simple test query with Method = GET and Path = /surveys?pageSize=5. A successful response means your authentication and base URL are correct.

Pro tip: Qualtrics API tokens don't expire automatically, but they can be regenerated from Account Settings → Qualtrics IDs → API. If you regenerate your token (e.g., due to a security incident), update the QUALTRICS_API_TOKEN configuration variable in Retool immediately — all Retool queries using this resource will fail with 401 until updated.

Expected result: The Qualtrics API REST Resource is saved in Retool with the X-API-TOKEN header configured using your configuration variable. A test query to /surveys returns a list of surveys confirming the connection is working.

3

List and browse surveys with response statistics

Create queries to list all Qualtrics surveys and fetch their response statistics. In your Retool app's Code panel, click + to add a new query. Name it getSurveys and select the Qualtrics API resource. Set Method to GET. In the Path field, enter /surveys. Add URL parameters: - key = pageSize, value = 100 - key = offset, value = {{ (pagination.page - 1) * 100 || 0 }} Qualtrics returns surveys in a result.elements array inside the response. Each survey object includes: id, name, isActive, creationDate, lastModifiedDate, and ownerId. Create a second query named getSurveyStats to get response counts for a selected survey. Set Method to GET, Path to /surveys/{{ table_surveys.selectedRow.id }}/responses?format=ndjson is not the right endpoint — instead use the survey metadata endpoint: /surveys/{{ table_surveys.selectedRow.id }} to get the survey's full details including response count in the result.responseCounts object. Bind getSurveys to a Table component. The data path is {{ getSurveys.data.result.elements }}. Configure columns for name, isActive, and the formatted creation date. Add a refresh button that triggers getSurveys to re-run. Add a search input that filters the surveys table client-side using Retool's Table filter column functionality.

transformer.js
1// JavaScript transformer — format Qualtrics survey list for Table
2const surveys = data.result?.elements || [];
3return surveys.map(survey => ({
4 id: survey.id,
5 name: survey.name || 'Unnamed Survey',
6 status: survey.isActive ? 'Active' : 'Inactive',
7 owner: survey.ownerId || 'N/A',
8 created: survey.creationDate
9 ? new Date(survey.creationDate).toLocaleDateString('en-US', {
10 year: 'numeric', month: 'short', day: 'numeric'
11 })
12 : 'N/A',
13 last_modified: survey.lastModifiedDate
14 ? new Date(survey.lastModifiedDate).toLocaleDateString('en-US', {
15 year: 'numeric', month: 'short', day: 'numeric'
16 })
17 : 'N/A'
18}));

Pro tip: Qualtrics survey IDs follow the SV_xxxxxxxxxxxxxxx format. Note the survey ID when you find surveys you'll query frequently — you can hardcode them in dropdown options or store them in a Retool Database table rather than always fetching the full surveys list dynamically.

Expected result: The getSurveys query returns a paginated list of all surveys in your Qualtrics account. The transformer formats dates and active status into readable values. The Table displays all surveys with their status and modification dates.

4

Export and browse survey response data

Exporting Qualtrics responses requires a two-step asynchronous process: first, initiate an export job, then poll for completion, and finally download the export file. This is more complex than a simple GET request. Create a query named startResponseExport. Set Method to POST. Path = /surveys/{{ dropdown_survey.value }}/export-responses. Body type = JSON. Body: { "format": "json", "startDate": "{{ dateRange.start }}", "endDate": "{{ dateRange.end }}", "compress": false } The response includes a result.progressId. Store this in a Retool Variable named exportProgressId. Create a second query named checkExportProgress (GET, /surveys/{{ dropdown_survey.value }}/export-responses/{{ exportProgressId.value }}). This returns the export status — run this every few seconds using a Retool Timer component until status is 'complete'. Create a third query named downloadExport (GET, /surveys/{{ dropdown_survey.value }}/export-responses/{{ exportProgressId.value }}/file). This downloads the completed export file as JSON. For a simpler alternative that avoids the multi-step export, use Qualtrics' responses endpoint for recent data: GET /surveys/{{ dropdown_survey.value }}/responses — this returns up to 100 responses directly without an async export job. Add URL parameters: startDate, endDate, and pageSize for filtering. Bind the response data to a Table. The responses are in data.result.elements, with each element containing a values object where keys are question IDs (QID1, QID2, etc.) and values are the response choices. For complex survey data that requires joining Qualtrics responses with internal customer data, RapidDev's team can help architect a Retool solution that enriches survey data with CRM and database records.

transformer.js
1// JavaScript transformer — flatten Qualtrics responses for Table
2const responses = data.result?.elements || [];
3return responses.map(response => {
4 const values = response.values || {};
5 return {
6 responseId: response.responseId,
7 start_date: values.startDate
8 ? new Date(values.startDate).toLocaleDateString('en-US')
9 : 'N/A',
10 end_date: values.endDate
11 ? new Date(values.endDate).toLocaleDateString('en-US')
12 : 'N/A',
13 // Duration in minutes
14 duration_min: values.duration
15 ? Math.round(values.duration / 60) + ' min'
16 : 'N/A',
17 finished: values.finished === 1 ? 'Complete' : 'Incomplete',
18 // Map specific question IDs to readable labels
19 // Update QID1, QID2 to match your survey's actual question IDs
20 nps_score: values.QID1 || 'N/A',
21 satisfaction: values.QID2 || 'N/A',
22 email: values.QID3 || values['QID3_TEXT'] || 'N/A'
23 };
24});

Pro tip: Qualtrics response exports use question IDs (QID1, QID2) as field names rather than question text. Map these to readable labels in your JavaScript transformer. Find your survey's question IDs in Qualtrics' Survey Builder — hover over a question's overflow menu and select 'Edit Question ID', or view the survey definition via GET /surveys/{surveyId}.

Expected result: The response query returns survey responses with question answers, completion status, and timing data. The transformer maps question IDs to readable column names. The responses Table allows filtering by completion status and date range.

5

Join Qualtrics NPS data with internal customer records

The most powerful Retool-Qualtrics use case combines survey response data with internal customer records. For NPS programs, this means joining respondent emails from Qualtrics with account data from your database or CRM. Add your database as a second resource in the Retool app (Resources tab → Add Resource → PostgreSQL or your database type). Create a query named getCustomerByEmail: SELECT customer_id, account_name, account_tier, arr, csm_name, product_line FROM customers WHERE email = '{{ table_responses.selectedRow.email }}' When a survey response row is selected in the Qualtrics responses table, this query automatically runs and loads the customer profile in a detail panel on the right. Create a JavaScript query named computeNPSSummary that aggregates all responses to compute the NPS score: Bind the NPS computation to a Stat component showing the overall NPS score (range -100 to 100), and add breakdown Charts showing promoter/passive/detractor percentages by customer segment. For a running NPS trend, create a query that fetches monthly response exports and computes NPS per month, then binds to a Line chart showing NPS over time. Add a data export button that downloads all joined records as a CSV using Retool's built-in Table export functionality, giving your CX team a combined dataset of survey responses enriched with account data for offline analysis.

nps_calculator.js
1// JavaScript query — compute NPS score from Qualtrics responses
2// Assumes nps_score column (0-10) exists after transformer
3const responses = getResponses.data?.result?.elements || [];
4const scores = responses
5 .map(r => parseInt(r.values?.QID1 || r.values?.NPS_SCORE, 10))
6 .filter(s => !isNaN(s));
7
8if (scores.length === 0) return { nps: 'N/A', promoters: 0, passives: 0, detractors: 0, total: 0 };
9
10const promoters = scores.filter(s => s >= 9).length;
11const passives = scores.filter(s => s >= 7 && s <= 8).length;
12const detractors = scores.filter(s => s <= 6).length;
13const total = scores.length;
14
15const nps = Math.round(((promoters - detractors) / total) * 100);
16
17return {
18 nps,
19 promoters,
20 passives,
21 detractors,
22 total,
23 promoter_pct: ((promoters / total) * 100).toFixed(1) + '%',
24 detractor_pct: ((detractors / total) * 100).toFixed(1) + '%'
25};

Pro tip: For NPS programs with high response volumes, avoid loading all responses in a single query. Instead, use Qualtrics' date range filters to limit exports to the current reporting period (e.g., current quarter), and use a Retool Workflow on a nightly schedule to pre-aggregate NPS scores and cache them in a Retool Database table for faster dashboard loads.

Expected result: The NPS dashboard displays the overall score, promoter/detractor breakdown, and a trend chart. Selecting a response row loads the customer account details from the internal database. The combined view shows survey sentiment alongside account tier and revenue for context.

Common use cases

Build a survey response monitoring dashboard

Create a Retool app that shows all active Qualtrics surveys with their total responses, completion rates, and last response date. Add a survey selector dropdown to drill into individual survey results and browse recent responses with applied filters for date range and completion status.

Retool Prompt

Build a survey monitoring panel that queries /surveys to list all surveys with response counts, displays survey name, response_count, and is_active in a Table, and triggers a response browser when a survey is selected showing individual responses from /surveys/{surveyId}/responses with date and completion filters.

Copy this prompt to try it in Retool

NPS trend tracker combining survey data with customer records

Build a customer NPS tracking dashboard that exports Qualtrics NPS survey responses, joins them with customer account data from your CRM database using the respondent email, and shows NPS score trends over time broken down by customer segment, account tier, or product line.

Retool Prompt

Create an NPS dashboard that exports responses from a specific Qualtrics NPS survey, joins on customer email with your PostgreSQL customers table, displays individual NPS scores with account tier and ARR in a Table, and shows a Line chart of average NPS score by month for the past 12 months.

Copy this prompt to try it in Retool

Distribution management and email send tracker

Build a distribution operations panel where research coordinators can view all email distributions for a survey, check delivery and open rates, identify non-responders for follow-up, and create new distribution sends to reminder segments — without needing full Qualtrics access for every team member.

Retool Prompt

Build a distribution tracker that queries /surveys/{surveyId}/distributions to list all email sends with sent_count, opened_count, responded_count, and bounced_count, shows a response rate chart comparing distributions, and includes a 'Send Reminder' button that POSTs a new distribution to non-responders.

Copy this prompt to try it in Retool

Troubleshooting

All API requests return 401 Unauthorized or 403 Forbidden

Cause: The X-API-TOKEN header is missing, incorrectly named, or the API token value is wrong. Qualtrics does not use the standard 'Authorization: Bearer' format — the header must be exactly 'X-API-TOKEN'.

Solution: Verify that the header name in your Retool Resource is exactly 'X-API-TOKEN' (all uppercase, with hyphens, no space). Check the token value matches what's shown in Qualtrics Account Settings → Qualtrics IDs → API. If you've recently regenerated your token, update the QUALTRICS_API_TOKEN configuration variable in Retool with the new value.

API requests return 404 Not Found even for basic endpoints like /surveys

Cause: The base URL contains an incorrect datacenter ID or organization subdomain. Qualtrics API URLs are datacenter-specific — using the wrong datacenter returns 404 for all requests.

Solution: Verify your Qualtrics login URL in your browser — it shows yourorg.datacenter.qualtrics.com. Extract the datacenter portion (e.g., co1, ca1, eu) and update your Retool Resource base URL to match: https://yourorg.datacenter.qualtrics.com/API/v3. Confirm the org subdomain matches your organization's Qualtrics domain exactly.

Response export query returns a progressId but the download query fails with 'export not complete'

Cause: The export job hasn't finished processing before the download query runs. Qualtrics exports are asynchronous and take several seconds to minutes depending on survey size.

Solution: Implement polling: after starting the export (getting a progressId), use a Retool Timer component set to run every 3 seconds that triggers the checkExportProgress query. When the status field returns 'complete', disable the timer and trigger the download query. The Timer component's enabled property should be bound to {{ exportStatus.data?.result?.status !== 'complete' }}.

Response data shows question IDs (QID1, QID2) instead of readable question text

Cause: Qualtrics API returns question IDs as field keys in the response values object. The question text is stored separately in the survey definition, not in the response data itself.

Solution: Fetch the survey definition using GET /surveys/{surveyId} to get the questions array, which maps each QID to its question text. Build a lookup map in a JavaScript transformer and use it to rename the QID columns to readable labels. Alternatively, hardcode the QID-to-label mapping in your transformer based on your specific survey structure.

typescript
1// Build QID to label map from survey definition
2const questions = getSurveyDefinition.data?.result?.questions || {};
3const qidMap = {};
4Object.entries(questions).forEach(([qid, question]) => {
5 qidMap[qid] = question.questionText?.replace(/<[^>]*>/g, '') || qid;
6});

Best practices

  • Store your Qualtrics API token as a Secret configuration variable in Retool — the X-API-TOKEN header is a powerful credential that grants full account access.
  • Double-check your Qualtrics datacenter ID in the Resource base URL — an incorrect datacenter causes 404 errors on all requests and is a common source of confusion during setup.
  • Use Qualtrics' direct responses endpoint (/surveys/{id}/responses) for small surveys and recent data instead of the asynchronous export flow, which adds complexity for small datasets.
  • Map Qualtrics question IDs (QID1, QID2) to readable labels in JavaScript transformers — document the QID-to-question mapping in a Retool Table or comment in the transformer for future maintainability.
  • For NPS tracking, pre-compute monthly NPS scores in a Retool Workflow that runs nightly and caches results in a Retool Database table — this makes the dashboard load instantly without real-time export API calls.
  • Join Qualtrics response data with your CRM or customer database in the same Retool app using respondent email as the join key, creating enriched analysis that shows survey sentiment alongside account data.
  • Implement error handling for the asynchronous export flow — check the export status field for 'failed' state and show a user-friendly error message with the failure reason before allowing retry.
  • Restrict Retool app access using Retool's permission groups so only authorized research and CX staff can view confidential survey response data containing personally identifiable information.

Alternatives

Frequently asked questions

Does Retool have a native connector for Qualtrics?

No, Qualtrics does not have a native connector in Retool. You connect via a REST API Resource using Qualtrics' API token authentication with the X-API-TOKEN header. Qualtrics' REST API provides access to surveys, responses, distributions, contacts, and directory data — all the capabilities needed for research operations dashboards.

Which Qualtrics plans include API access?

Qualtrics API access is included with XM Platform licenses (Research Core, Customer Experience, Employee Experience, and enterprise plans). Standard individual accounts and free academic accounts may not include API access. Contact your Qualtrics account administrator or Qualtrics support to confirm your license includes API access before attempting to generate an API token.

How do I find survey IDs for specific surveys I want to query?

Survey IDs (in the format SV_xxxxxxxxxxxxxxx) are visible in three places in Qualtrics: (1) the URL when editing a survey (contains SurveyID=SV_xxx), (2) Survey Settings → Survey Summary → Survey ID field, and (3) the /surveys API endpoint that Retool can call — the response lists all surveys with their IDs and names. The API approach is best for building a dynamic survey selector dropdown in Retool.

Can I create or distribute surveys from Retool?

Yes, Qualtrics' API supports creating survey distributions via POST to /surveys/{surveyId}/distributions. You can create email distributions by specifying a contact list, message library, and send timing. This enables Retool to act as a distribution management panel where research coordinators can trigger survey sends to specific segments without logging into Qualtrics directly. Survey creation is also possible through the API but is complex — it's more practical to create surveys in Qualtrics' UI and manage distribution and response analysis from Retool.

How do I handle large response exports with thousands of records?

For large surveys with thousands of responses, use Qualtrics' asynchronous export flow (POST to /export-responses, poll status, then download) rather than the direct responses endpoint (which is limited to smaller datasets). In Retool, implement this as a three-query workflow triggered by a button: Start Export → Poll Status (with a Timer) → Download File. For recurring large exports, use a Retool Workflow on a nightly schedule to export and cache responses in a Retool Database table for fast dashboard queries.

RapidDev

Talk to an Expert

Our team has built 600+ apps. Get personalized help with your project.

Book a free consultation

Integrations are where projects stall

We wire Retool integrations like this one every week — auth, webhooks, edge cases included. Fixed-price builds from $13K, delivered in 6–10 weeks.

Talk to an integration engineer

We put the rapid in RapidDev

Need a dedicated strategic tech and growth partner? Discover what RapidDev can do for your business! Book a call with our team to schedule a free, no-obligation consultation. We'll discuss your project and provide a custom quote at no cost.