Final implemented event pack for the stxtai.com pre-signup quiz funnel, verified end-to-end against BigQuery production data over the last 7 days.
The final implemented spec was consolidated from four Linear tickets and one canonical comment thread:
signupStarted vs signupFormSubmitted renameFunnel is currently live on stxtai.com (Lander B, match_me variant) and stxtai.com/v2 (Lander A, creator_funnel_v2 variant). TJ paid traffic ramp-up is scheduled under GTM-1893.
Single SPA across home → quiz → teaser → signup. Reuse-first pattern: extend existing events where possible, net-new only when no equivalent exists. All event names are camelCase; Segment auto-converts to snake_case for BigQuery tables.
| # | Event (camelCase) | BQ table | Trigger | Required properties |
|---|---|---|---|---|
| 1 | page (auto pageView) | d2c_prod.pages | Lander / mounts | page_name='landerHome', affid, clickid, sourceclickid, ef_transaction_id, anonymous_id |
| 2 | quizStartCtaClicked | quiz_start_cta_clicked | "Start matching" CTA tap on home | cta_location, cta_label, quiz_variant, Everflow params |
| 3 | quizStepViewed | quiz_step_viewed | Each quiz step renders | quiz_step (int), step_name, quiz_variant, Everflow params |
| 4 | quizStepAnswered | quiz_step_answered | "Next" tap on each step | quiz_step, step_name, answer_value, time_on_step_ms, is_multi_select, quiz_variant, Everflow params |
| 5 | teaserResultsViewed | teaser_results_viewed | Teaser screen renders | quiz_variant (legacy — being collapsed into /signup per spec v2) |
| 6 | signupStarted | signup_started | Sign-up CTA at quiz end | funnel_source='quizLander' | 'quizLanderV2', quiz_answers_* (looks, body, personality, kinks, roleplay…), quiz_variant |
| 7 | signupFormSubmitted | signup_form_submitted | Form submit / Google OAuth tap on /signup | method (email|google), source |
| 8 | signupCompleted | signup_completed | Account created | standard signup props |
| 9 | identify | identifies | Post-signup | quiz_variant + q_* traits (q_personality, q_kinks, q_body_type, q_hair_color, q_age, q_nationality, q_relationship, q_roleplay, q_creator, q_pet_name) |
anonymous_id + step gaps in dbt view quiz_abandonment_by_step_by_variant.
Session stitching: Segment anonymous_id is the only session key across the full funnel (no custom sessionId). Everflow params (affid, clickid, sourceclickid, ef_transaction_id) are captured once at lander arrival and replayed from localStorage for all downstream events.
| Event | Rows (7d) | Unique users (7d) | Status |
|---|---|---|---|
pages (lander pageviews) | 3,403 | 2,141 | OK |
quiz_start_cta_clicked | 41 | 26 | OK (low volume, pre-ramp) |
quiz_step_viewed | 573 | 57 | OK |
quiz_step_answered | 547 | 54 | OK (~95% answer rate) |
teaser_results_viewed | 81 | 54 | Still firing (v2 spec removes it) |
signup_started | 68 | 52 | OK |
signup_form_submitted | 85 | 66 | OK |
signup_completed | 70 | 65 | OK |
identifies | 639 | 595 | OK (full app, not only quiz) |
results_cta_clicked | 0 | 0 | Killed — confirmed |
quiz_started, quiz_completed, quiz_abandoned, lander_home_viewed | 0 | 0 | Killed — confirmed |
| Property | quiz_step_viewed | quiz_step_answered | quiz_start_cta_clicked | signup_started |
|---|---|---|---|---|
anonymous_id | 100% | 100% | 100% | 100% |
quiz_variant | 100% | 100% | 100% | 100% |
quiz_step | 100% | 100% | n/a | n/a |
step_name | 100% | 100% | n/a | n/a |
cta_label / cta_location | n/a | n/a | 100% | n/a |
affid | 28% (162/573) | 29% (156/547) | 15% (6/41) | 32% (22/68) |
ef_transaction_id | 31% (180/573) | 31% (172/547) | 20% (8/41) | 35% (24/68) |
quiz_start_cta_clicked. Likely deep-link entry into /quiz bypassing the home CTA, or a race condition where the step mounts before the CTA event flushes. Action: Mac UAT check — navigate home → start → verify start CTA fires exactly once before any step event.
affid < ef_transaction_id — 18 quiz_step_viewed rows + 2 signup_started rows carry ef_transaction_id without affid. Either the Everflow link is missing the aff param, or our extractor drops it. Action: Flag to @ruslan / @ivan ahead of TJ ramp-up.
quiz_start_cta_clicked has lower Everflow coverage (15% affid) than downstream events (~28-31%). Suggests the click happens before localStorage replay has hydrated. Action: verify Everflow params are read synchronously on first paint.
match_me) and 4 (creator_funnel_v2). Two match_me rows are intro/outro screens (screen_appearance, screen_about) that still fire quiz_step_viewed — fine, but the analytics-docs and step_name enum should reflect reality.
teaser_results_viewed still firing (81 rows / 54 users). Per GTM-1842 v2 spec, the teaser screen was collapsed into /signup. Either the screen wasn't removed, or the event call survived the merge. Action: Ruslan check.
quiz_variant (67/617). Correct for non-quiz users (legacy signups, app re-identifies), but means int_segment_identify_quiz_traits_latest only has 67 quiz users with traits in 7d. Cohort slicing by q_* only works on that slice.
quiz_funnel_by_variant dbt view shows ~52,677 users at step 1 with __quiz_variant_unknown__ — most stxtai.com traffic isn't tagged with a quiz_variant at the page-view layer. Per D2C-4687 variant should resolve at runtime on the home route — verify it's populating on pages.page_name='landerHome'. Right now the dbt funnel can't slice the entry layer by variant cleanly.
quiz_variant is 100% on every quiz eventanonymous_id stitching is consistent across the funnellanderHomeViewed, quizStarted, quizCompleted, quizAbandoned, resultsCtaClicked) confirmed not firingmatch_me, creator_funnel_v2) produce distinct, parseable funnelssignupStarted carries funnel_source + per-variant quiz_answers_* payload correctlysignupFormSubmitted rename landed — methods: email, google; sources: quizLander, quizLanderV2, signup-pagestxtai.com/quiz direct) to determine whether quiz_start_cta_clicked should backfill or stays null by design.aff param survives the OAuth round-trip when ef_transaction_id does (the 18/2 mismatch).teaser_results_viewed should be silenced or kept for backfill comparison.quiz_variant is populated on the first pages payload from / (D2C-4687 acceptance criterion).affid / ef_transaction_id fill rate to jump to ~80-90% on quiz events.