How to Track Quiz Performance with Google Analytics¶
Google Analytics shows you how customers move through your quiz, and where they leave it.
The Built for Shopify version has GA4 event tracking built in. Turn it on in the quiz, and the events reach the GA4 property your store already uses.
GA4 can drop events that fired correctly
Since Google moved from Universal Analytics to GA4, event tracking has become less reliable. The code can be right, and the events can fire, and GA4 can still fail to read, process or report them.
If that happens, contact Google Support. The problem is usually on their side.
This version sends GA4 events once you connect the quiz to Google Analytics. You can add events of your own on top, with a custom script.
GA4 can drop events that fired correctly
Since Google moved from Universal Analytics to GA4, event tracking has become less reliable. The code can be right, and the events can fire, and GA4 can still fail to read, process or report them.
If that happens, contact Google Support. The problem is usually on their side.
This version sends GA4 events once you connect the quiz to Google Analytics. You can add events of your own on top, with a custom script.
GA4 can drop events that fired correctly
Since Google moved from Universal Analytics to GA4, event tracking has become less reliable. The code can be right, and the events can fire, and GA4 can still fail to read, process or report them.
If that happens, contact Google Support. The problem is usually on their side.
This version sends GA4 events once you connect the quiz to Google Analytics. You can add events of your own on top, with a custom script.
GA4 can drop events that fired correctly
Since Google moved from Universal Analytics to GA4, event tracking has become less reliable. The code can be right, and the events can fire, and GA4 can still fail to read, process or report them.
If that happens, contact Google Support. The problem is usually on their side.
This version sends GA4 events once you connect the quiz to Google Analytics. You can add events of your own on top, with a custom script.
GA4 can drop events that fired correctly
Since Google moved from Universal Analytics to GA4, event tracking has become less reliable. The code can be right, and the events can fire, and GA4 can still fail to read, process or report them.
If that happens, contact Google Support. The problem is usually on their side.
This version sends GA4 events once you connect the quiz to Google Analytics. You can add events of your own on top, with a custom script.
GA4 can drop events that fired correctly
Since Google moved from Universal Analytics to GA4, event tracking has become less reliable. The code can be right, and the events can fire, and GA4 can still fail to read, process or report them.
If that happens, contact Google Support. The problem is usually on their side.
Connect the quiz to Google Analytics¶
Give the quiz its own page
GA4 tracking works best when the quiz sits on a page of its own. See How to Embed an Inline Quiz on Your Store.
-
Set up GA4 on your website first.
Finding your GA4 tracking code
See the Google Analytics setup documentation.
-
Open your quiz and go to the Integrations tab.
-
Find the Google Analytics section and click
Activate.
-
Click
Save. -
Take the quiz, then open
Realtimein GA4 and check the quiz events arrive.
The quiz connects to the GA4 tracking code already on your website, so there is no Measurement ID to enter. Reports other than Realtime can take up to 72 hours to fill in.
Give the quiz its own page
GA4 tracking works best when the quiz sits on a page of its own. See How to Embed an Inline Quiz on Your Store.
-
Set up GA4 on your website first.
Finding your GA4 tracking code
See the Google Analytics setup documentation.
-
Check that your
gtag.jssnippet loads before the RevenueHuntembed.jssnippet. GA4 has to be ready before the quiz starts sending to it. -
Open your quiz and go to the Connect tab.
-
Find Google Analytics and click
Connect. -
Take the quiz, then open
Realtimein GA4 and check the quiz events arrive.
The quiz sends to whichever GA4 property your gtag.js is configured with, so there is no Measurement ID to enter. Reports other than Realtime can take up to 72 hours to fill in.
Give the quiz its own page
GA4 tracking works best when the quiz sits on a page of its own. See How to Embed an Inline Quiz on Your Store.
-
Set up GA4 on your website first.
Finding your GA4 tracking code
See the Google Analytics setup documentation.
-
Check that your
gtag.jssnippet loads before the RevenueHuntembed.jssnippet. GA4 has to be ready before the quiz starts sending to it. -
Open your quiz and go to the Connect tab.
-
Find Google Analytics and click
Connect. -
Take the quiz, then open
Realtimein GA4 and check the quiz events arrive.
The quiz sends to whichever GA4 property your gtag.js is configured with, so there is no Measurement ID to enter. Reports other than Realtime can take up to 72 hours to fill in.
Give the quiz its own page
GA4 tracking works best when the quiz sits on a page of its own. See How to Embed an Inline Quiz on Your Store.
-
Set up GA4 on your website first.
Finding your GA4 tracking code
See the Google Analytics setup documentation.
-
Check that your
gtag.jssnippet loads before the RevenueHuntembed.jssnippet. GA4 has to be ready before the quiz starts sending to it. -
Open your quiz and go to the Connect tab.
-
Find Google Analytics and click
Connect. -
Take the quiz, then open
Realtimein GA4 and check the quiz events arrive.
The quiz sends to whichever GA4 property your gtag.js is configured with, so there is no Measurement ID to enter. Reports other than Realtime can take up to 72 hours to fill in.
Give the quiz its own page
GA4 tracking works best when the quiz sits on a page of its own. See How to Embed an Inline Quiz on Your Store.
-
Set up GA4 on your website first.
Finding your GA4 tracking code
See the Google Analytics setup documentation.
-
Check that your
gtag.jssnippet loads before the RevenueHuntembed.jssnippet. GA4 has to be ready before the quiz starts sending to it. -
Open your quiz and go to the Connect tab.
-
Find Google Analytics and click
Connect. -
Take the quiz, then open
Realtimein GA4 and check the quiz events arrive.
The quiz sends to whichever GA4 property your gtag.js is configured with, so there is no Measurement ID to enter. Reports other than Realtime can take up to 72 hours to fill in.
Give the quiz its own page
GA4 tracking works best when the quiz sits on a page of its own. See How to Embed an Inline Quiz on Your Store.
-
Set up GA4 on your website first.
Finding your GA4 tracking code
See the Google Analytics setup documentation.
-
Check that your
gtag.jssnippet loads before the RevenueHuntembed.jssnippet. GA4 has to be ready before the quiz starts sending to it. -
Open your quiz and go to the Connect tab.
-
Find Google Analytics and click
Connect. -
Take the quiz, then open
Realtimein GA4 and check the quiz events arrive.
The quiz sends to whichever GA4 property your gtag.js is configured with, so there is no Measurement ID to enter. Reports other than Realtime can take up to 72 hours to fill in.
Track customer behavior (events)¶
Once the quiz is connected, an event fires at each step of the quiz. They appear in Google Analytics under Reports > View user engagement and retention > Events. Click an event name to open it.

| Trigger | Event name | Event parameters |
|---|---|---|
| The customer starts a quiz, by clicking the button on the first or welcome question | quiz_started_{quiz_name} | quiz_name |
| The customer views a question | question_viewed_{question_title} | question_title |
| The customer clicks a choice, or picks a dropdown option | block_answered_{choice_text} | choice_text, question_title, question_ref |
| The customer answers the email question | email_lead_{quiz_name} | quiz_name |
| The customer answers the phone question | phone_lead_{quiz_name} | quiz_name |
| The customer reaches the results page | results_page_viewed_{results_page_title} | results_page_title |
| The customer completes the quiz | generate_lead | quiz_name |
| The customer clicks a product, by its image or its view-product button | product_clicked_{product_name} | product_name |
The customer adds a product to the cart, by Add to cart or Add all to cart |
product_added_to_cart_{product_name} | product_name |
| The customer proceeds to the cart or the checkout | proceed_to_checkout_{quiz_name} | quiz_name |
| The customer retakes the quiz | quiz_retake_quiz_{quiz_name} | quiz_name |
Reading the event names
Each name carries its main parameter, so the value shows up in the GA4 Event name report without any setup. To use the other parameters as report columns, such as question_title or question_ref, register them as custom dimensions under Admin > Custom definitions.
generate_lead is a standard GA4 conversion event
It is the one name with no _{...} suffix, so that GA4 can treat it as a conversion. Mark it as a key event under Admin > Events to count it as one.
A question title can hold an unresolved recall token
question_title, and the question_viewed_{question_title} event name, carry the raw title. If a question recalls an earlier answer, the raw title holds a token such as {{slide:x1i0d83}}, and that token reaches GA4 rather than the answer.
The token is stable. It does not change for a customer, or when you edit the quiz, so it groups correctly. It is just not readable.
The older event names are gone
view, click, submit and recommendation, with their event_category and event_label parameters, are no longer sent. The quiz sends the events listed here instead.
Give the data time to appear
Check Realtime in GA4 first. The other reports can take up to 72 hours to process the data.

| Trigger | Event name | Event parameters |
|---|---|---|
| The customer starts a quiz, by clicking the button on the first or welcome question | quiz_started_{quiz_name} | quiz_name |
| The customer views a question | question_viewed_{question_title} | question_title |
| The customer clicks a choice, or picks a dropdown option | block_answered_{choice_text} | choice_text, question_title, question_ref |
| The customer answers the email question | email_lead_{quiz_name} | quiz_name |
| The customer answers the phone question | phone_lead_{quiz_name} | quiz_name |
| The customer reaches the results page | results_page_viewed_{results_page_title} | results_page_title |
| The customer completes the quiz | generate_lead | quiz_name |
| The customer clicks a product, by its image or its view-product button | product_clicked_{product_name} | product_name |
The customer adds a product to the cart, by Add to cart or Add all to cart |
product_added_to_cart_{product_name} | product_name |
| The customer proceeds to the cart or the checkout | proceed_to_checkout_{quiz_name} | quiz_name |
| The customer retakes the quiz | quiz_retake_quiz_{quiz_name} | quiz_name |
Reading the event names
Each name carries its main parameter, so the value shows up in the GA4 Event name report without any setup. To use the other parameters as report columns, such as question_title or question_ref, register them as custom dimensions under Admin > Custom definitions.
generate_lead is a standard GA4 conversion event
It is the one name with no _{...} suffix, so that GA4 can treat it as a conversion. Mark it as a key event under Admin > Events to count it as one.
A question title can hold an unresolved recall token
question_title, and the question_viewed_{question_title} event name, carry the raw title. If a question recalls an earlier answer, the raw title holds a token such as {{slide:x1i0d83}}, and that token reaches GA4 rather than the answer.
The token is stable. It does not change for a customer, or when you edit the quiz, so it groups correctly. It is just not readable.
The older event names are gone
view, click, submit and recommendation, with their event_category and event_label parameters, are no longer sent. The quiz sends the events listed here instead.
Give the data time to appear
Check Realtime in GA4 first. The other reports can take up to 72 hours to process the data.
No events at all
Check that your gtag.js snippet loads before the RevenueHunt embed.js snippet.

| Trigger | Event name | Event parameters |
|---|---|---|
| The customer starts a quiz, by clicking the button on the first or welcome question | quiz_started_{quiz_name} | quiz_name |
| The customer views a question | question_viewed_{question_title} | question_title |
| The customer clicks a choice, or picks a dropdown option | block_answered_{choice_text} | choice_text, question_title, question_ref |
| The customer answers the email question | email_lead_{quiz_name} | quiz_name |
| The customer answers the phone question | phone_lead_{quiz_name} | quiz_name |
| The customer reaches the results page | results_page_viewed_{results_page_title} | results_page_title |
| The customer completes the quiz | generate_lead | quiz_name |
| The customer clicks a product, by its image or its view-product button | product_clicked_{product_name} | product_name |
The customer adds a product to the cart, by Add to cart or Add all to cart |
product_added_to_cart_{product_name} | product_name |
| The customer proceeds to the cart or the checkout | proceed_to_checkout_{quiz_name} | quiz_name |
| The customer retakes the quiz | quiz_retake_quiz_{quiz_name} | quiz_name |
Reading the event names
Each name carries its main parameter, so the value shows up in the GA4 Event name report without any setup. To use the other parameters as report columns, such as question_title or question_ref, register them as custom dimensions under Admin > Custom definitions.
generate_lead is a standard GA4 conversion event
It is the one name with no _{...} suffix, so that GA4 can treat it as a conversion. Mark it as a key event under Admin > Events to count it as one.
A question title can hold an unresolved recall token
question_title, and the question_viewed_{question_title} event name, carry the raw title. If a question recalls an earlier answer, the raw title holds a token such as {{slide:x1i0d83}}, and that token reaches GA4 rather than the answer.
The token is stable. It does not change for a customer, or when you edit the quiz, so it groups correctly. It is just not readable.
The older event names are gone
view, click, submit and recommendation, with their event_category and event_label parameters, are no longer sent. The quiz sends the events listed here instead.
Give the data time to appear
Check Realtime in GA4 first. The other reports can take up to 72 hours to process the data.
No events at all
Check that your gtag.js snippet loads before the RevenueHunt embed.js snippet.

| Trigger | Event name | Event parameters |
|---|---|---|
| The customer starts a quiz, by clicking the button on the first or welcome question | quiz_started_{quiz_name} | quiz_name |
| The customer views a question | question_viewed_{question_title} | question_title |
| The customer clicks a choice, or picks a dropdown option | block_answered_{choice_text} | choice_text, question_title, question_ref |
| The customer answers the email question | email_lead_{quiz_name} | quiz_name |
| The customer answers the phone question | phone_lead_{quiz_name} | quiz_name |
| The customer reaches the results page | results_page_viewed_{results_page_title} | results_page_title |
| The customer completes the quiz | generate_lead | quiz_name |
| The customer clicks a product, by its image or its view-product button | product_clicked_{product_name} | product_name |
The customer adds a product to the cart, by Add to cart or Add all to cart |
product_added_to_cart_{product_name} | product_name |
| The customer proceeds to the cart or the checkout | proceed_to_checkout_{quiz_name} | quiz_name |
| The customer retakes the quiz | quiz_retake_quiz_{quiz_name} | quiz_name |
Reading the event names
Each name carries its main parameter, so the value shows up in the GA4 Event name report without any setup. To use the other parameters as report columns, such as question_title or question_ref, register them as custom dimensions under Admin > Custom definitions.
generate_lead is a standard GA4 conversion event
It is the one name with no _{...} suffix, so that GA4 can treat it as a conversion. Mark it as a key event under Admin > Events to count it as one.
A question title can hold an unresolved recall token
question_title, and the question_viewed_{question_title} event name, carry the raw title. If a question recalls an earlier answer, the raw title holds a token such as {{slide:x1i0d83}}, and that token reaches GA4 rather than the answer.
The token is stable. It does not change for a customer, or when you edit the quiz, so it groups correctly. It is just not readable.
The older event names are gone
view, click, submit and recommendation, with their event_category and event_label parameters, are no longer sent. The quiz sends the events listed here instead.
Give the data time to appear
Check Realtime in GA4 first. The other reports can take up to 72 hours to process the data.
No events at all
Check that your gtag.js snippet loads before the RevenueHunt embed.js snippet.

| Trigger | Event name | Event parameters |
|---|---|---|
| The customer starts a quiz, by clicking the button on the first or welcome question | quiz_started_{quiz_name} | quiz_name |
| The customer views a question | question_viewed_{question_title} | question_title |
| The customer clicks a choice, or picks a dropdown option | block_answered_{choice_text} | choice_text, question_title, question_ref |
| The customer answers the email question | email_lead_{quiz_name} | quiz_name |
| The customer answers the phone question | phone_lead_{quiz_name} | quiz_name |
| The customer reaches the results page | results_page_viewed_{results_page_title} | results_page_title |
| The customer completes the quiz | generate_lead | quiz_name |
| The customer clicks a product, by its image or its view-product button | product_clicked_{product_name} | product_name |
The customer adds a product to the cart, by Add to cart or Add all to cart |
product_added_to_cart_{product_name} | product_name |
| The customer proceeds to the cart or the checkout | proceed_to_checkout_{quiz_name} | quiz_name |
| The customer retakes the quiz | quiz_retake_quiz_{quiz_name} | quiz_name |
Reading the event names
Each name carries its main parameter, so the value shows up in the GA4 Event name report without any setup. To use the other parameters as report columns, such as question_title or question_ref, register them as custom dimensions under Admin > Custom definitions.
generate_lead is a standard GA4 conversion event
It is the one name with no _{...} suffix, so that GA4 can treat it as a conversion. Mark it as a key event under Admin > Events to count it as one.
A question title can hold an unresolved recall token
question_title, and the question_viewed_{question_title} event name, carry the raw title. If a question recalls an earlier answer, the raw title holds a token such as {{slide:x1i0d83}}, and that token reaches GA4 rather than the answer.
The token is stable. It does not change for a customer, or when you edit the quiz, so it groups correctly. It is just not readable.
The older event names are gone
view, click, submit and recommendation, with their event_category and event_label parameters, are no longer sent. The quiz sends the events listed here instead.
Give the data time to appear
Check Realtime in GA4 first. The other reports can take up to 72 hours to process the data.
No events at all
Check that your gtag.js snippet loads before the RevenueHunt embed.js snippet.

| Trigger | Event name | Event parameters |
|---|---|---|
| The customer starts a quiz, by clicking the button on the first or welcome question | quiz_started_{quiz_name} | quiz_name |
| The customer views a question | question_viewed_{question_title} | question_title |
| The customer clicks a choice, or picks a dropdown option | block_answered_{choice_text} | choice_text, question_title, question_ref |
| The customer answers the email question | email_lead_{quiz_name} | quiz_name |
| The customer answers the phone question | phone_lead_{quiz_name} | quiz_name |
| The customer reaches the results page | results_page_viewed_{results_page_title} | results_page_title |
| The customer completes the quiz | generate_lead | quiz_name |
| The customer clicks a product, by its image or its view-product button | product_clicked_{product_name} | product_name |
The customer adds a product to the cart, by Add to cart or Add all to cart |
product_added_to_cart_{product_name} | product_name |
| The customer proceeds to the cart or the checkout | proceed_to_checkout_{quiz_name} | quiz_name |
| The customer retakes the quiz | quiz_retake_quiz_{quiz_name} | quiz_name |
Reading the event names
Each name carries its main parameter, so the value shows up in the GA4 Event name report without any setup. To use the other parameters as report columns, such as question_title or question_ref, register them as custom dimensions under Admin > Custom definitions.
generate_lead is a standard GA4 conversion event
It is the one name with no _{...} suffix, so that GA4 can treat it as a conversion. Mark it as a key event under Admin > Events to count it as one.
A question title can hold an unresolved recall token
question_title, and the question_viewed_{question_title} event name, carry the raw title. If a question recalls an earlier answer, the raw title holds a token such as {{slide:x1i0d83}}, and that token reaches GA4 rather than the answer.
The token is stable. It does not change for a customer, or when you edit the quiz, so it groups correctly. It is just not readable.
The older event names are gone
view, click, submit and recommendation, with their event_category and event_label parameters, are no longer sent. The quiz sends the events listed here instead.
Give the data time to appear
Check Realtime in GA4 first. The other reports can take up to 72 hours to process the data.
No events at all
Check that your gtag.js snippet loads before the RevenueHunt embed.js snippet.
Add your own events¶
The events above arrive without any code. Add a script only for something they do not cover.
The quiz gives your code a window.quiz object, in the Custom JS section of a question or of the results page. It takes plain JavaScript, with no <script> tags, and runs in the preview and the live quiz but not in the builder.
The callbacks do not exist in this version
prqQuizCallback and prqSlideCallback belong to the five older versions, not to Built for Shopify. Use window.quiz here.
Track every answer. Open the first question, expand its Custom JS section, and assign a handler to window.quiz.onChange. It fires after every answer, and stays registered for the rest of the quiz.
// Fires after every answer the customer gives
window.quiz.onChange = function (event) {
gtag('event', 'quiz_question_answered', {
event_category: 'quiz',
question_ref: event.questionRef,
// selectedLabel is the readable choice text, so no choice-ID mapping is needed
answer: event.selectedLabel || event.value
});
};
The event object holds questionRef, blockRef, type, choicesRefs, value, isValid, selectedIndex and selectedLabel.
Track quiz completion. Open the Custom JS section of the results page and call gtag() directly. It runs when the results page renders.
Check it works. Take the quiz, then look under Reports > Engagement > Events in GA4, or in Realtime.
Your own events come from the callback functions, in a script on the page that holds the quiz. To load it everywhere, put it in your theme's main template.
Before you paste it in
- Your GA4
gtag.jssnippet must load before the RevenueHuntembed.jssnippet. - The built-in events and this script both fire once the quiz is connected. To avoid counting twice, either disconnect the built-in integration and use the script alone, or delete the events you do not want from the script.
Only quiz completion. If all you need is to know that a customer finished, one callback does it.
<script>
// Fires once, when the customer reaches the results page
function prqQuizCallback(quizResponse){
gtag('event', 'quiz_completed', {
event_category: 'quiz',
quiz_name: quizResponse.quiz.attributes.name,
quiz_id: quizResponse.quizid
});
}
</script>
Everything the quiz does. The script below sends the quiz start, every answer, the results page, each recommended product, and each add to cart, as its own GA4 event. It replaces the completion-only callback rather than sitting alongside it.
<script>
(function () {
var quizStarted = false;
var productsBySku = {}; // captured on the results page, used to enrich add-to-cart
// Fires every time a customer answers a question.
// The first time it runs, it doubles as the "quiz started" signal.
window.prqSlideCallback = function (event) {
var slide = event && event.slide;
if (!slide || !slide.attributes) return;
if (!quizStarted) {
quizStarted = true;
gtag('event', 'quiz_start', { quiz_name: event.quiz.attributes.name });
}
var choices = (slide.attributes.choices && slide.attributes.choices.data) || [];
var selected = slide.attributes.values || [];
// Map selected choice IDs to readable labels (raw value passes through for text/number questions)
var labels = selected.map(function (val) {
var match = choices.filter(function (c) { return c.id === val; })[0];
return match ? match.attributes.label : val;
});
gtag('event', 'quiz_question_answered', {
quiz_name: event.quiz.attributes.name,
// strip any unresolved recall token like {{slide:x1i0d83}} from the title
question_title: (slide.attributes.title || '').replace(/\{\{slide:\w+\}\}/g, '').trim(),
answer: labels.join(', ')
});
};
// Fires once, when the customer reaches the results page.
window.prqQuizCallback = function (response) {
var quizName = response.quiz.attributes.name;
var result = response.response.attributes.selected_result;
var resultName = (result && result.data) ? result.data.attributes.name : '';
var products = response.response.attributes.recommended_products || [];
// One event for reaching the results page
gtag('event', 'quiz_results', {
quiz_name: quizName,
result_name: resultName,
product_count: products.length
});
// One event per recommended product (see the note below on why these are separate)
products.forEach(function (p) {
productsBySku[p.sku] = p; // stash for add-to-cart enrichment
gtag('event', 'quiz_product_recommended', {
quiz_name: quizName,
result_name: resultName,
product_name: p.name,
product_sku: p.sku,
product_price: p.price,
product_id: p.origin_id,
variant_id: p.variant_id
});
});
};
// Fires when a customer adds a recommended product to the cart from the results page.
// The add-to-cart event carries sku / origin_id / variant_id; name and price are
// enriched from the products captured above.
window.prqAddOneToCartCallback = function (event) {
var p = productsBySku[event.sku] || {};
gtag('event', 'quiz_add_to_cart', {
product_name: p.name || '',
product_sku: event.sku,
product_price: p.price || '',
product_id: event.originId,
variant_id: event.variantId
});
};
})();
</script>
Why quiz_results and quiz_product_recommended are separate
A results page can recommend more than one product. Firing the results event once, and a per-product event alongside it, keeps the count of customers who reached the results page accurate. Fire one combined event per product instead and that count multiplies by the number of products shown.
Using the parameters in reports
quiz_name, question_title, answer, product_name and the rest are ordinary GA4 event parameters. Register the ones you need as custom dimensions under Admin > Custom definitions.
Check it works. Take the quiz, then look under Reports > Engagement > Events in GA4, or in Realtime.
Your own events come from the callback functions, in a script on the page that holds the quiz. To load it everywhere, put it in your theme's main template.
Before you paste it in
- Your GA4
gtag.jssnippet must load before the RevenueHuntembed.jssnippet. - The built-in events and this script both fire once the quiz is connected. To avoid counting twice, either disconnect the built-in integration and use the script alone, or delete the events you do not want from the script.
Only quiz completion. If all you need is to know that a customer finished, one callback does it.
<script>
// Fires once, when the customer reaches the results page
function prqQuizCallback(quizResponse){
gtag('event', 'quiz_completed', {
event_category: 'quiz',
quiz_name: quizResponse.quiz.attributes.name,
quiz_id: quizResponse.quizid
});
}
</script>
Everything the quiz does. The script below sends the quiz start, every answer, the results page, each recommended product, and each add to cart, as its own GA4 event. It replaces the completion-only callback rather than sitting alongside it.
<script>
(function () {
var quizStarted = false;
var productsBySku = {}; // captured on the results page, used to enrich add-to-cart
// Fires every time a customer answers a question.
// The first time it runs, it doubles as the "quiz started" signal.
window.prqSlideCallback = function (event) {
var slide = event && event.slide;
if (!slide || !slide.attributes) return;
if (!quizStarted) {
quizStarted = true;
gtag('event', 'quiz_start', { quiz_name: event.quiz.attributes.name });
}
var choices = (slide.attributes.choices && slide.attributes.choices.data) || [];
var selected = slide.attributes.values || [];
// Map selected choice IDs to readable labels (raw value passes through for text/number questions)
var labels = selected.map(function (val) {
var match = choices.filter(function (c) { return c.id === val; })[0];
return match ? match.attributes.label : val;
});
gtag('event', 'quiz_question_answered', {
quiz_name: event.quiz.attributes.name,
// strip any unresolved recall token like {{slide:x1i0d83}} from the title
question_title: (slide.attributes.title || '').replace(/\{\{slide:\w+\}\}/g, '').trim(),
answer: labels.join(', ')
});
};
// Fires once, when the customer reaches the results page.
window.prqQuizCallback = function (response) {
var quizName = response.quiz.attributes.name;
var result = response.response.attributes.selected_result;
var resultName = (result && result.data) ? result.data.attributes.name : '';
var products = response.response.attributes.recommended_products || [];
// One event for reaching the results page
gtag('event', 'quiz_results', {
quiz_name: quizName,
result_name: resultName,
product_count: products.length
});
// One event per recommended product (see the note below on why these are separate)
products.forEach(function (p) {
productsBySku[p.sku] = p; // stash for add-to-cart enrichment
gtag('event', 'quiz_product_recommended', {
quiz_name: quizName,
result_name: resultName,
product_name: p.name,
product_sku: p.sku,
product_price: p.price,
product_id: p.origin_id,
variant_id: p.variant_id
});
});
};
// Fires when a customer adds a recommended product to the cart from the results page.
// The add-to-cart event carries sku / origin_id / variant_id; name and price are
// enriched from the products captured above.
window.prqAddOneToCartCallback = function (event) {
var p = productsBySku[event.sku] || {};
gtag('event', 'quiz_add_to_cart', {
product_name: p.name || '',
product_sku: event.sku,
product_price: p.price || '',
product_id: event.originId,
variant_id: event.variantId
});
};
})();
</script>
Why quiz_results and quiz_product_recommended are separate
A results page can recommend more than one product. Firing the results event once, and a per-product event alongside it, keeps the count of customers who reached the results page accurate. Fire one combined event per product instead and that count multiplies by the number of products shown.
Using the parameters in reports
quiz_name, question_title, answer, product_name and the rest are ordinary GA4 event parameters. Register the ones you need as custom dimensions under Admin > Custom definitions.
Check it works. Take the quiz, then look under Reports > Engagement > Events in GA4, or in Realtime.
Your own events come from the callback functions, in a script on the page that holds the quiz. To load it everywhere, put it in your theme's main template.
Before you paste it in
- Your GA4
gtag.jssnippet must load before the RevenueHuntembed.jssnippet. - The built-in events and this script both fire once the quiz is connected. To avoid counting twice, either disconnect the built-in integration and use the script alone, or delete the events you do not want from the script.
Only quiz completion. If all you need is to know that a customer finished, one callback does it.
<script>
// Fires once, when the customer reaches the results page
function prqQuizCallback(quizResponse){
gtag('event', 'quiz_completed', {
event_category: 'quiz',
quiz_name: quizResponse.quiz.attributes.name,
quiz_id: quizResponse.quizid
});
}
</script>
Everything the quiz does. The script below sends the quiz start, every answer, the results page, each recommended product, and each add to cart, as its own GA4 event. It replaces the completion-only callback rather than sitting alongside it.
<script>
(function () {
var quizStarted = false;
var productsBySku = {}; // captured on the results page, used to enrich add-to-cart
// Fires every time a customer answers a question.
// The first time it runs, it doubles as the "quiz started" signal.
window.prqSlideCallback = function (event) {
var slide = event && event.slide;
if (!slide || !slide.attributes) return;
if (!quizStarted) {
quizStarted = true;
gtag('event', 'quiz_start', { quiz_name: event.quiz.attributes.name });
}
var choices = (slide.attributes.choices && slide.attributes.choices.data) || [];
var selected = slide.attributes.values || [];
// Map selected choice IDs to readable labels (raw value passes through for text/number questions)
var labels = selected.map(function (val) {
var match = choices.filter(function (c) { return c.id === val; })[0];
return match ? match.attributes.label : val;
});
gtag('event', 'quiz_question_answered', {
quiz_name: event.quiz.attributes.name,
// strip any unresolved recall token like {{slide:x1i0d83}} from the title
question_title: (slide.attributes.title || '').replace(/\{\{slide:\w+\}\}/g, '').trim(),
answer: labels.join(', ')
});
};
// Fires once, when the customer reaches the results page.
window.prqQuizCallback = function (response) {
var quizName = response.quiz.attributes.name;
var result = response.response.attributes.selected_result;
var resultName = (result && result.data) ? result.data.attributes.name : '';
var products = response.response.attributes.recommended_products || [];
// One event for reaching the results page
gtag('event', 'quiz_results', {
quiz_name: quizName,
result_name: resultName,
product_count: products.length
});
// One event per recommended product (see the note below on why these are separate)
products.forEach(function (p) {
productsBySku[p.sku] = p; // stash for add-to-cart enrichment
gtag('event', 'quiz_product_recommended', {
quiz_name: quizName,
result_name: resultName,
product_name: p.name,
product_sku: p.sku,
product_price: p.price,
product_id: p.origin_id,
variant_id: p.variant_id
});
});
};
// Fires when a customer adds a recommended product to the cart from the results page.
// The add-to-cart event carries sku / origin_id / variant_id; name and price are
// enriched from the products captured above.
window.prqAddOneToCartCallback = function (event) {
var p = productsBySku[event.sku] || {};
gtag('event', 'quiz_add_to_cart', {
product_name: p.name || '',
product_sku: event.sku,
product_price: p.price || '',
product_id: event.originId,
variant_id: event.variantId
});
};
})();
</script>
Why quiz_results and quiz_product_recommended are separate
A results page can recommend more than one product. Firing the results event once, and a per-product event alongside it, keeps the count of customers who reached the results page accurate. Fire one combined event per product instead and that count multiplies by the number of products shown.
Using the parameters in reports
quiz_name, question_title, answer, product_name and the rest are ordinary GA4 event parameters. Register the ones you need as custom dimensions under Admin > Custom definitions.
Check it works. Take the quiz, then look under Reports > Engagement > Events in GA4, or in Realtime.
Your own events come from the callback functions, in a script on the page that holds the quiz. To load it everywhere, put it in your theme's main template.
Before you paste it in
- Your GA4
gtag.jssnippet must load before the RevenueHuntembed.jssnippet. - The built-in events and this script both fire once the quiz is connected. To avoid counting twice, either disconnect the built-in integration and use the script alone, or delete the events you do not want from the script.
Only quiz completion. If all you need is to know that a customer finished, one callback does it.
<script>
// Fires once, when the customer reaches the results page
function prqQuizCallback(quizResponse){
gtag('event', 'quiz_completed', {
event_category: 'quiz',
quiz_name: quizResponse.quiz.attributes.name,
quiz_id: quizResponse.quizid
});
}
</script>
Everything the quiz does. The script below sends the quiz start, every answer, the results page, each recommended product, and each add to cart, as its own GA4 event. It replaces the completion-only callback rather than sitting alongside it.
<script>
(function () {
var quizStarted = false;
var productsBySku = {}; // captured on the results page, used to enrich add-to-cart
// Fires every time a customer answers a question.
// The first time it runs, it doubles as the "quiz started" signal.
window.prqSlideCallback = function (event) {
var slide = event && event.slide;
if (!slide || !slide.attributes) return;
if (!quizStarted) {
quizStarted = true;
gtag('event', 'quiz_start', { quiz_name: event.quiz.attributes.name });
}
var choices = (slide.attributes.choices && slide.attributes.choices.data) || [];
var selected = slide.attributes.values || [];
// Map selected choice IDs to readable labels (raw value passes through for text/number questions)
var labels = selected.map(function (val) {
var match = choices.filter(function (c) { return c.id === val; })[0];
return match ? match.attributes.label : val;
});
gtag('event', 'quiz_question_answered', {
quiz_name: event.quiz.attributes.name,
// strip any unresolved recall token like {{slide:x1i0d83}} from the title
question_title: (slide.attributes.title || '').replace(/\{\{slide:\w+\}\}/g, '').trim(),
answer: labels.join(', ')
});
};
// Fires once, when the customer reaches the results page.
window.prqQuizCallback = function (response) {
var quizName = response.quiz.attributes.name;
var result = response.response.attributes.selected_result;
var resultName = (result && result.data) ? result.data.attributes.name : '';
var products = response.response.attributes.recommended_products || [];
// One event for reaching the results page
gtag('event', 'quiz_results', {
quiz_name: quizName,
result_name: resultName,
product_count: products.length
});
// One event per recommended product (see the note below on why these are separate)
products.forEach(function (p) {
productsBySku[p.sku] = p; // stash for add-to-cart enrichment
gtag('event', 'quiz_product_recommended', {
quiz_name: quizName,
result_name: resultName,
product_name: p.name,
product_sku: p.sku,
product_price: p.price,
product_id: p.origin_id,
variant_id: p.variant_id
});
});
};
// Fires when a customer adds a recommended product to the cart from the results page.
// The add-to-cart event carries sku / origin_id / variant_id; name and price are
// enriched from the products captured above.
window.prqAddOneToCartCallback = function (event) {
var p = productsBySku[event.sku] || {};
gtag('event', 'quiz_add_to_cart', {
product_name: p.name || '',
product_sku: event.sku,
product_price: p.price || '',
product_id: event.originId,
variant_id: event.variantId
});
};
})();
</script>
Why quiz_results and quiz_product_recommended are separate
A results page can recommend more than one product. Firing the results event once, and a per-product event alongside it, keeps the count of customers who reached the results page accurate. Fire one combined event per product instead and that count multiplies by the number of products shown.
Using the parameters in reports
quiz_name, question_title, answer, product_name and the rest are ordinary GA4 event parameters. Register the ones you need as custom dimensions under Admin > Custom definitions.
Check it works. Take the quiz, then look under Reports > Engagement > Events in GA4, or in Realtime.
Your own events come from the callback functions, in a script on the page that holds the quiz. To load it everywhere, put it in your theme's main template.
Before you paste it in
- Your GA4
gtag.jssnippet must load before the RevenueHuntembed.jssnippet. - The built-in events and this script both fire once the quiz is connected. To avoid counting twice, either disconnect the built-in integration and use the script alone, or delete the events you do not want from the script.
Only quiz completion. If all you need is to know that a customer finished, one callback does it.
<script>
// Fires once, when the customer reaches the results page
function prqQuizCallback(quizResponse){
gtag('event', 'quiz_completed', {
event_category: 'quiz',
quiz_name: quizResponse.quiz.attributes.name,
quiz_id: quizResponse.quizid
});
}
</script>
Everything the quiz does. The script below sends the quiz start, every answer, the results page, each recommended product, and each add to cart, as its own GA4 event. It replaces the completion-only callback rather than sitting alongside it.
<script>
(function () {
var quizStarted = false;
var productsBySku = {}; // captured on the results page, used to enrich add-to-cart
// Fires every time a customer answers a question.
// The first time it runs, it doubles as the "quiz started" signal.
window.prqSlideCallback = function (event) {
var slide = event && event.slide;
if (!slide || !slide.attributes) return;
if (!quizStarted) {
quizStarted = true;
gtag('event', 'quiz_start', { quiz_name: event.quiz.attributes.name });
}
var choices = (slide.attributes.choices && slide.attributes.choices.data) || [];
var selected = slide.attributes.values || [];
// Map selected choice IDs to readable labels (raw value passes through for text/number questions)
var labels = selected.map(function (val) {
var match = choices.filter(function (c) { return c.id === val; })[0];
return match ? match.attributes.label : val;
});
gtag('event', 'quiz_question_answered', {
quiz_name: event.quiz.attributes.name,
// strip any unresolved recall token like {{slide:x1i0d83}} from the title
question_title: (slide.attributes.title || '').replace(/\{\{slide:\w+\}\}/g, '').trim(),
answer: labels.join(', ')
});
};
// Fires once, when the customer reaches the results page.
window.prqQuizCallback = function (response) {
var quizName = response.quiz.attributes.name;
var result = response.response.attributes.selected_result;
var resultName = (result && result.data) ? result.data.attributes.name : '';
var products = response.response.attributes.recommended_products || [];
// One event for reaching the results page
gtag('event', 'quiz_results', {
quiz_name: quizName,
result_name: resultName,
product_count: products.length
});
// One event per recommended product (see the note below on why these are separate)
products.forEach(function (p) {
productsBySku[p.sku] = p; // stash for add-to-cart enrichment
gtag('event', 'quiz_product_recommended', {
quiz_name: quizName,
result_name: resultName,
product_name: p.name,
product_sku: p.sku,
product_price: p.price,
product_id: p.origin_id,
variant_id: p.variant_id
});
});
};
// Fires when a customer adds a recommended product to the cart from the results page.
// The add-to-cart event carries sku / origin_id / variant_id; name and price are
// enriched from the products captured above.
window.prqAddOneToCartCallback = function (event) {
var p = productsBySku[event.sku] || {};
gtag('event', 'quiz_add_to_cart', {
product_name: p.name || '',
product_sku: event.sku,
product_price: p.price || '',
product_id: event.originId,
variant_id: event.variantId
});
};
})();
</script>
Why quiz_results and quiz_product_recommended are separate
A results page can recommend more than one product. Firing the results event once, and a per-product event alongside it, keeps the count of customers who reached the results page accurate. Fire one combined event per product instead and that count multiplies by the number of products shown.
Using the parameters in reports
quiz_name, question_title, answer, product_name and the rest are ordinary GA4 event parameters. Register the ones you need as custom dimensions under Admin > Custom definitions.
Check it works. Take the quiz, then look under Reports > Engagement > Events in GA4, or in Realtime.
Track quiz revenue¶
GA4 does not tie quiz events to purchases on its own. Build a segment of the customers who started a quiz, then read the purchase revenue for that segment.
Compare quiz customers with everyone else


-
In GA4, go to
Explore, click+, and chooseFree form. -
Build the quiz segment. In the
Variablespanel, underSegments, click+and chooseUser segment. Include users whereEvent namecontainsquiz_started, or usematches regexwith^quiz_started_.*$. Name itQuiz Users, then clickSave and apply. -
Add the default
All Userssegment too, so you have something to compare against. -
Add the dimensions and metrics. In the
Variablespanel, addEvent nameunderDimensions, andEvent count,PurchasesandTotal revenueunderMetrics. -
Fill in the
Tab Settingspanel.Field Value SegmentsAll UsersandQuiz UsersRowsEvent nameColumnsLeave empty, or set Segmentfor a side-by-side comparisonValuesEvent count,Purchases,Total revenueFiltersEvent namecontainsquiz_startedVisualizationTable, orBar chartDate rangeLast 28 days -
Read the table. It shows the revenue and purchases from customers who triggered
quiz_started, next to the figures for everyone. -
Rename the exploration, to something like
Quiz Revenue, then star or share it so your teammates can find it.
Narrowing it further
- One quiz at a time. Set
FilterstoEvent namecontains that quiz, such asquiz_started_skincare_quiz_usa. - One quiz page. If the quiz has a page of its own, build the segment on
Page locationcontains that path instead, such as/pages/skin-quiz.
Attribute revenue with UTM parameters
Tag the links into your quiz with utm_source=quiz or utm_campaign=quiz_name. Revenue then appears in the GA4 Advertising > Attribution > Model comparison report, and under Engagement > Conversions > Event name > purchase.

Add a Source column beside the default channel grouping, then look for the rows with the revenuehunt source.

More from Google
See the Google Analytics documentation on tracking revenue from events.
Compare quiz customers with everyone else


-
In GA4, go to
Explore, click+, and chooseFree form. -
Build the quiz segment. In the
Variablespanel, underSegments, click+and chooseUser segment. Include users whereEvent namecontainsquiz_started, or usematches regexwith^quiz_started_.*$. Name itQuiz Users, then clickSave and apply. -
Add the default
All Userssegment too, so you have something to compare against. -
Add the dimensions and metrics. In the
Variablespanel, addEvent nameunderDimensions, andEvent count,PurchasesandTotal revenueunderMetrics. -
Fill in the
Tab Settingspanel.Field Value SegmentsAll UsersandQuiz UsersRowsEvent nameColumnsLeave empty, or set Segmentfor a side-by-side comparisonValuesEvent count,Purchases,Total revenueFiltersEvent namecontainsquiz_startedVisualizationTable, orBar chartDate rangeLast 28 days -
Read the table. It shows the revenue and purchases from customers who triggered
quiz_started, next to the figures for everyone. -
Rename the exploration, to something like
Quiz Revenue, then star or share it so your teammates can find it.
Narrowing it further
- One quiz at a time. Set
FilterstoEvent namecontains that quiz, such asquiz_started_skincare_quiz_usa. - One quiz page. If the quiz has a page of its own, build the segment on
Page locationcontains that path instead, such as/pages/skin-quiz.
Attribute revenue with UTM parameters
Tag the links into your quiz with utm_source=quiz or utm_campaign=quiz_name. Revenue then appears in the GA4 Advertising > Attribution > Model comparison report, and under Engagement > Conversions > Event name > purchase.

Add a Source column beside the default channel grouping, then look for the rows with the revenuehunt source.

More from Google
See the Google Analytics documentation on tracking revenue from events.
Compare quiz customers with everyone else


-
In GA4, go to
Explore, click+, and chooseFree form. -
Build the quiz segment. In the
Variablespanel, underSegments, click+and chooseUser segment. Include users whereEvent namecontainsquiz_started, or usematches regexwith^quiz_started_.*$. Name itQuiz Users, then clickSave and apply. -
Add the default
All Userssegment too, so you have something to compare against. -
Add the dimensions and metrics. In the
Variablespanel, addEvent nameunderDimensions, andEvent count,PurchasesandTotal revenueunderMetrics. -
Fill in the
Tab Settingspanel.Field Value SegmentsAll UsersandQuiz UsersRowsEvent nameColumnsLeave empty, or set Segmentfor a side-by-side comparisonValuesEvent count,Purchases,Total revenueFiltersEvent namecontainsquiz_startedVisualizationTable, orBar chartDate rangeLast 28 days -
Read the table. It shows the revenue and purchases from customers who triggered
quiz_started, next to the figures for everyone. -
Rename the exploration, to something like
Quiz Revenue, then star or share it so your teammates can find it.
Narrowing it further
- One quiz at a time. Set
FilterstoEvent namecontains that quiz, such asquiz_started_skincare_quiz_usa. - One quiz page. If the quiz has a page of its own, build the segment on
Page locationcontains that path instead, such as/pages/skin-quiz.
Attribute revenue with UTM parameters
Tag the links into your quiz with utm_source=quiz or utm_campaign=quiz_name. Revenue then appears in the GA4 Advertising > Attribution > Model comparison report, and under Engagement > Conversions > Event name > purchase.

Add a Source column beside the default channel grouping, then look for the rows with the revenuehunt source.

More from Google
See the Google Analytics documentation on tracking revenue from events.
Compare quiz customers with everyone else


-
In GA4, go to
Explore, click+, and chooseFree form. -
Build the quiz segment. In the
Variablespanel, underSegments, click+and chooseUser segment. Include users whereEvent namecontainsquiz_started, or usematches regexwith^quiz_started_.*$. Name itQuiz Users, then clickSave and apply. -
Add the default
All Userssegment too, so you have something to compare against. -
Add the dimensions and metrics. In the
Variablespanel, addEvent nameunderDimensions, andEvent count,PurchasesandTotal revenueunderMetrics. -
Fill in the
Tab Settingspanel.Field Value SegmentsAll UsersandQuiz UsersRowsEvent nameColumnsLeave empty, or set Segmentfor a side-by-side comparisonValuesEvent count,Purchases,Total revenueFiltersEvent namecontainsquiz_startedVisualizationTable, orBar chartDate rangeLast 28 days -
Read the table. It shows the revenue and purchases from customers who triggered
quiz_started, next to the figures for everyone. -
Rename the exploration, to something like
Quiz Revenue, then star or share it so your teammates can find it.
Narrowing it further
- One quiz at a time. Set
FilterstoEvent namecontains that quiz, such asquiz_started_skincare_quiz_usa. - One quiz page. If the quiz has a page of its own, build the segment on
Page locationcontains that path instead, such as/pages/skin-quiz.
Attribute revenue with UTM parameters
Tag the links into your quiz with utm_source=quiz or utm_campaign=quiz_name. Revenue then appears in the GA4 Advertising > Attribution > Model comparison report, and under Engagement > Conversions > Event name > purchase.

Add a Source column beside the default channel grouping, then look for the rows with the revenuehunt source.

More from Google
See the Google Analytics documentation on tracking revenue from events.
Compare quiz customers with everyone else


-
In GA4, go to
Explore, click+, and chooseFree form. -
Build the quiz segment. In the
Variablespanel, underSegments, click+and chooseUser segment. Include users whereEvent namecontainsquiz_started, or usematches regexwith^quiz_started_.*$. Name itQuiz Users, then clickSave and apply. -
Add the default
All Userssegment too, so you have something to compare against. -
Add the dimensions and metrics. In the
Variablespanel, addEvent nameunderDimensions, andEvent count,PurchasesandTotal revenueunderMetrics. -
Fill in the
Tab Settingspanel.Field Value SegmentsAll UsersandQuiz UsersRowsEvent nameColumnsLeave empty, or set Segmentfor a side-by-side comparisonValuesEvent count,Purchases,Total revenueFiltersEvent namecontainsquiz_startedVisualizationTable, orBar chartDate rangeLast 28 days -
Read the table. It shows the revenue and purchases from customers who triggered
quiz_started, next to the figures for everyone. -
Rename the exploration, to something like
Quiz Revenue, then star or share it so your teammates can find it.
Narrowing it further
- One quiz at a time. Set
FilterstoEvent namecontains that quiz, such asquiz_started_skincare_quiz_usa. - One quiz page. If the quiz has a page of its own, build the segment on
Page locationcontains that path instead, such as/pages/skin-quiz.
Attribute revenue with UTM parameters
Tag the links into your quiz with utm_source=quiz or utm_campaign=quiz_name. Revenue then appears in the GA4 Advertising > Attribution > Model comparison report, and under Engagement > Conversions > Event name > purchase.

Add a Source column beside the default channel grouping, then look for the rows with the revenuehunt source.

More from Google
See the Google Analytics documentation on tracking revenue from events.
Compare quiz customers with everyone else


-
In GA4, go to
Explore, click+, and chooseFree form. -
Build the quiz segment. In the
Variablespanel, underSegments, click+and chooseUser segment. Include users whereEvent namecontainsquiz_started, or usematches regexwith^quiz_started_.*$. Name itQuiz Users, then clickSave and apply. -
Add the default
All Userssegment too, so you have something to compare against. -
Add the dimensions and metrics. In the
Variablespanel, addEvent nameunderDimensions, andEvent count,PurchasesandTotal revenueunderMetrics. -
Fill in the
Tab Settingspanel.Field Value SegmentsAll UsersandQuiz UsersRowsEvent nameColumnsLeave empty, or set Segmentfor a side-by-side comparisonValuesEvent count,Purchases,Total revenueFiltersEvent namecontainsquiz_startedVisualizationTable, orBar chartDate rangeLast 28 days -
Read the table. It shows the revenue and purchases from customers who triggered
quiz_started, next to the figures for everyone. -
Rename the exploration, to something like
Quiz Revenue, then star or share it so your teammates can find it.
Narrowing it further
- One quiz at a time. Set
FilterstoEvent namecontains that quiz, such asquiz_started_skincare_quiz_usa. - One quiz page. If the quiz has a page of its own, build the segment on
Page locationcontains that path instead, such as/pages/skin-quiz.
Attribute revenue with UTM parameters
Tag the links into your quiz with utm_source=quiz or utm_campaign=quiz_name. Revenue then appears in the GA4 Advertising > Attribution > Model comparison report, and under Engagement > Conversions > Event name > purchase.

Add a Source column beside the default channel grouping, then look for the rows with the revenuehunt source.

More from Google
See the Google Analytics documentation on tracking revenue from events.
Use GA4 explorations¶
Standard GA4 reports show the trend. An exploration answers a specific question about how customers use your quiz.
An exploration lets you:
- Compare quiz customers with everyone else. See how much revenue comes from the customers who start a quiz.
- Break the results down by quiz. If you run several, see which brings in the most purchases.
- Build a funnel. Follow
quiz_startedtoresults_page_viewedtoproduct_added_to_carttopurchase, and find where customers drop out. - Follow customer paths. See what a customer does after the quiz, such as opening a recommended product or going straight to the checkout.
- Build an audience. Save the quiz customers as an audience for later analysis, or for remarketing in Google Ads.
Find your most clicked choices

-
In GA4, go to
Explore, click+, and chooseFree form. -
Add the dimensions and metrics. In the
Variablespanel, addEvent nameunderDimensions, andEvent countunderMetrics. -
Fill in the
Tab Settingspanel.Field Value SegmentsAll Users, orQuiz Usersto count only the customers who took a quizRowsEvent nameValuesEvent countFiltersEvent namecontainsblock_answeredVisualizationTable, orBar chartDate rangeLast 28 days -
Read the table. Each
block_answeredrow is one choice, and the event count is how often customers picked it. -
Rename the exploration, to something like
Most Clicked Choices, then star or share it so your teammates can find it.
More on explorations
See the Google Analytics documentation on GA4 explorations.
An exploration lets you:
- Compare quiz customers with everyone else. See how much revenue comes from the customers who start a quiz.
- Break the results down by quiz. If you run several, see which brings in the most purchases.
- Build a funnel. Follow
quiz_startedtoresults_page_viewedtoproduct_added_to_carttopurchase, and find where customers drop out. - Follow customer paths. See what a customer does after the quiz, such as opening a recommended product or going straight to the checkout.
- Build an audience. Save the quiz customers as an audience for later analysis, or for remarketing in Google Ads.
Find your most clicked choices

-
In GA4, go to
Explore, click+, and chooseFree form. -
Add the dimensions and metrics. In the
Variablespanel, addEvent nameunderDimensions, andEvent countunderMetrics. -
Fill in the
Tab Settingspanel.Field Value SegmentsAll Users, orQuiz Usersto count only the customers who took a quizRowsEvent nameValuesEvent countFiltersEvent namecontainsblock_answeredVisualizationTable, orBar chartDate rangeLast 28 days -
Read the table. Each
block_answeredrow is one choice, and the event count is how often customers picked it. -
Rename the exploration, to something like
Most Clicked Choices, then star or share it so your teammates can find it.
More on explorations
See the Google Analytics documentation on GA4 explorations.
An exploration lets you:
- Compare quiz customers with everyone else. See how much revenue comes from the customers who start a quiz.
- Break the results down by quiz. If you run several, see which brings in the most purchases.
- Build a funnel. Follow
quiz_startedtoresults_page_viewedtoproduct_added_to_carttopurchase, and find where customers drop out. - Follow customer paths. See what a customer does after the quiz, such as opening a recommended product or going straight to the checkout.
- Build an audience. Save the quiz customers as an audience for later analysis, or for remarketing in Google Ads.
Find your most clicked choices

-
In GA4, go to
Explore, click+, and chooseFree form. -
Add the dimensions and metrics. In the
Variablespanel, addEvent nameunderDimensions, andEvent countunderMetrics. -
Fill in the
Tab Settingspanel.Field Value SegmentsAll Users, orQuiz Usersto count only the customers who took a quizRowsEvent nameValuesEvent countFiltersEvent namecontainsblock_answeredVisualizationTable, orBar chartDate rangeLast 28 days -
Read the table. Each
block_answeredrow is one choice, and the event count is how often customers picked it. -
Rename the exploration, to something like
Most Clicked Choices, then star or share it so your teammates can find it.
More on explorations
See the Google Analytics documentation on GA4 explorations.
An exploration lets you:
- Compare quiz customers with everyone else. See how much revenue comes from the customers who start a quiz.
- Break the results down by quiz. If you run several, see which brings in the most purchases.
- Build a funnel. Follow
quiz_startedtoresults_page_viewedtoproduct_added_to_carttopurchase, and find where customers drop out. - Follow customer paths. See what a customer does after the quiz, such as opening a recommended product or going straight to the checkout.
- Build an audience. Save the quiz customers as an audience for later analysis, or for remarketing in Google Ads.
Find your most clicked choices

-
In GA4, go to
Explore, click+, and chooseFree form. -
Add the dimensions and metrics. In the
Variablespanel, addEvent nameunderDimensions, andEvent countunderMetrics. -
Fill in the
Tab Settingspanel.Field Value SegmentsAll Users, orQuiz Usersto count only the customers who took a quizRowsEvent nameValuesEvent countFiltersEvent namecontainsblock_answeredVisualizationTable, orBar chartDate rangeLast 28 days -
Read the table. Each
block_answeredrow is one choice, and the event count is how often customers picked it. -
Rename the exploration, to something like
Most Clicked Choices, then star or share it so your teammates can find it.
More on explorations
See the Google Analytics documentation on GA4 explorations.
An exploration lets you:
- Compare quiz customers with everyone else. See how much revenue comes from the customers who start a quiz.
- Break the results down by quiz. If you run several, see which brings in the most purchases.
- Build a funnel. Follow
quiz_startedtoresults_page_viewedtoproduct_added_to_carttopurchase, and find where customers drop out. - Follow customer paths. See what a customer does after the quiz, such as opening a recommended product or going straight to the checkout.
- Build an audience. Save the quiz customers as an audience for later analysis, or for remarketing in Google Ads.
Find your most clicked choices

-
In GA4, go to
Explore, click+, and chooseFree form. -
Add the dimensions and metrics. In the
Variablespanel, addEvent nameunderDimensions, andEvent countunderMetrics. -
Fill in the
Tab Settingspanel.Field Value SegmentsAll Users, orQuiz Usersto count only the customers who took a quizRowsEvent nameValuesEvent countFiltersEvent namecontainsblock_answeredVisualizationTable, orBar chartDate rangeLast 28 days -
Read the table. Each
block_answeredrow is one choice, and the event count is how often customers picked it. -
Rename the exploration, to something like
Most Clicked Choices, then star or share it so your teammates can find it.
More on explorations
See the Google Analytics documentation on GA4 explorations.
An exploration lets you:
- Compare quiz customers with everyone else. See how much revenue comes from the customers who start a quiz.
- Break the results down by quiz. If you run several, see which brings in the most purchases.
- Build a funnel. Follow
quiz_startedtoresults_page_viewedtoproduct_added_to_carttopurchase, and find where customers drop out. - Follow customer paths. See what a customer does after the quiz, such as opening a recommended product or going straight to the checkout.
- Build an audience. Save the quiz customers as an audience for later analysis, or for remarketing in Google Ads.
Find your most clicked choices

-
In GA4, go to
Explore, click+, and chooseFree form. -
Add the dimensions and metrics. In the
Variablespanel, addEvent nameunderDimensions, andEvent countunderMetrics. -
Fill in the
Tab Settingspanel.Field Value SegmentsAll Users, orQuiz Usersto count only the customers who took a quizRowsEvent nameValuesEvent countFiltersEvent namecontainsblock_answeredVisualizationTable, orBar chartDate rangeLast 28 days -
Read the table. Each
block_answeredrow is one choice, and the event count is how often customers picked it. -
Rename the exploration, to something like
Most Clicked Choices, then star or share it so your teammates can find it.
More on explorations
See the Google Analytics documentation on GA4 explorations.
This article explains how to connect a quiz to Google Analytics, and which events it then sends. It also covers adding events of your own, and reading the revenue back out.