Qualtrics model

Distribution performance

Email distribution funnel: sent, bounced, opened, started, finished, and the rates between them, per distribution.

Grain
qualtrics_account x distribution
Built from
  1. 2
    Raw tables
  2. 2
    Staging
  3. 1
    Core
  4. 1
    Analytics
Reads from Qualtrics
distributionsurvey
Ships as
Weld and dbt SQL, open source on GitHub
core.qualtrics.distribution_performance
1-- core.qualtrics.distribution_performance
2-- Email distribution funnel: sent, bounced, opened, started, finished, and the rates
3-- between them, per distribution.
4-- Grain: qualtrics_account x distribution. Dated by `sent_at`.
5-- Depends on: staging.qualtrics.distribution, .survey
6--
7-- This recreates the per-distribution stats on Qualtrics' Distributions tab. The
8-- counts are Qualtrics' own running totals as of the last time the distribution
9-- was synced (see staging/distribution.sql), so a distribution sent months
10-- ago may show slightly lower started and finished figures than the UI if
11-- respondents kept trickling in after it left the sync's look-back window.
12--
13-- RATES ARE PER DISTRIBUTION. To roll up to survey or month, sum the counts and
14-- divide, never average the rates. Reminders and thank-yous are separate rows,
15-- linked to their invite by `parent_distribution_id`; filter on
16-- `request_type = 'Invite'` before summing `sent` if you want people invited
17-- rather than emails sent.
18
19SELECT
20    d.qualtrics_account,
21    d.distribution_id,
22    d.parent_distribution_id,
23    d.survey_id,
24    s.survey_name,
25    d.request_type,
26    d.request_status,
27    d.link_type,
28    d.mailing_list_id,
29    d.from_name,
30    d.sent_at,
31    DATE(d.sent_at) AS sent_date,
32
33    d.sent,
34    d.failed,
35    d.bounced,
36    d.blocked,
37    d.skipped,
38    d.complaints,
39    d.opened,
40    d.started,

This model and the 3 it depends on. Deploy them together; refs like {{staging.…}} resolve to the matching folders in Weld, and the dbt view uses source() and ref().

Notes

How it counts. And where it stops.

This recreates the per-distribution stats on Qualtrics' Distributions tab. The counts are Qualtrics' own running totals as of the last time the distribution was synced (see staging/distribution.sql), so a distribution sent months ago may show slightly lower started and finished figures than the UI if respondents kept trickling in after it left the sync's look-back window. RATES ARE PER DISTRIBUTION. To roll up to survey or month, sum the counts and divide, never average the rates. Reminders and thank-yous are separate rows, linked to their invite by `parent_distribution_id`; filter on `request_type = 'Invite'` before summing `sent` if you want people invited rather than emails sent.

Raw tables it reads

  • raw.qualtrics.distribution
  • raw.qualtrics.survey

Put Qualtrics in front
of your agents.

Connect Qualtrics, deploy the models, and ask questions in Claude, Cursor or ChatGPT. Free for 14 days, no credit card.