For the complete documentation index, see llms.txt. This page is also available as Markdown.

Web Pixel Events

Subscribe to Zigpoll lifecycle and answer events from a Shopify Custom Pixel

Zigpoll's Shopify checkout extension publishes a documented set of Web Pixels custom events so you can react to survey activity from a Shopify Custom Pixel — fire a Klaviyo flow when a survey completes, push answers into GA4 / GTM, kick off a loyalty action when a question is answered, etc.

All events use the zigpoll: namespace and fire from the Zigpoll post-purchase / order-status / customer-account surfaces.

If you're only after a quick GA4 setup, the simpler GA4 Shopify Pixel recipe uses the legacy zigpoll-event channel and is easier to copy-paste. This page is the full event reference for richer integrations.

Event catalog

Event
When it fires

zigpoll:poll_rendered

The first time a survey's frame is shown to the shopper on this surface

zigpoll:poll_opened

The survey widget expands / becomes interactive

zigpoll:slide_viewed

A new slide becomes the active slide

zigpoll:answer_submitted

Any answer is accepted by the server — fires once per submitted slide, for every interactive slide type (single-choice, multi-choice, dropdown, rating, satisfaction, NPS, range, free-response, form, email-capture, rank, date, file-upload)

zigpoll:poll_completed

All required slides have been answered. Payload includes an answers array with every collected response

zigpoll:poll_closed

The shopper dismisses the widget without completing

zigpoll:poll_hidden

The widget is hidden permanently (hideAfterSubmission / hideAfterClose)

Base payload

Every zigpoll:* event includes these fields on event.customData:

Field
Type
Description

pollId

string

Internal survey id

pollHandle

string

Slugified survey title

pollTitle

string

Survey title

surface

string

shopify_checkout, shopify_thank_you, shopify_order_status, or shopify_customer_profile

shopifyOrderId

string | undefined

The Shopify order id when available

shopifyCustomerId

string | undefined

The Shopify customer id when available

myshopifyDomain

string

The store's .myshopify.com domain

timestamp

string

ISO-8601 timestamp of the event

Answer payload (zigpoll:answer_submitted and entries in zigpoll:poll_completed.answers[])

Per-slide answer entries match the shape Zigpoll uses everywhere else — webhooks, mailer, Klaviyo bridge:

Field
Type
Description

key

string

The slide's handle (the identifier you set in the survey editor)

value

string | number

Compiled human-readable answer. Joined with , for multi-answer types

arrayValue

string[] | undefined

Present for multi-answer slides (multi-choice, rank, form) — the answer choices as an array

slideId

string

Internal slide id

How value is shaped per slide type

Slide type

Example value

arrayValue

single-choice, dropdown

"Blue"

multi-choice

"Blue, Green"

["Blue", "Green"]

rank

"#1 Apple, #2 Pear"

rating, satisfaction, nps, range

4

free-response, short-answer, long-answer

"I like the ocean"

email-capture

"alice@example.com"

form

"Name: Alice, Email: alice@example.com"

date

"03/15/2026"

file-upload

"https://…/file1, https://…/file2"

Subscribing from a Custom Pixel

  1. Go to your Shopify Dashboard → Settings → Customer Events.

  2. Click Add custom pixel.

  3. Paste a subscription block like the one below:

Forwarding to GA4 with the new events

If you want richer GA4 events than the legacy GA4 Shopify Pixel recipe gives you — for example, separate events for Survey Started, Question Answered, and Survey Completed — replace the legacy subscription with one block per event:

Security note

Per Shopify's own Web Pixels docs, custom events can be published by anyone with browser-console access — including the shopper. Treat the payloads as untrusted input for security-sensitive decisions; they're fine for analytics, attribution, and triggering downstream marketing flows, but don't grant rewards or change account state purely based on a customData value.

Backward compatibility

The original zigpoll-event channel that the GA4 Shopify Pixel recipe subscribes to is still published unchanged. Existing pixels keep working — these new namespaced events are additive.

Last updated