> For the complete documentation index, see [llms.txt](https://docs.zigpoll.com/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.zigpoll.com/polls/behavior-settings.md).

# Workflows

What your survey does with a response — notifications, reminders, actions, analysis and Shopify write-back

Workflows are everything a survey does *after* someone responds. Open a survey, go to **Settings → Workflows**, and pick a tab:

| Tab               | What it controls                                                                         |
| ----------------- | ---------------------------------------------------------------------------------------- |
| **Notifications** | Who on your team is emailed when a response comes in                                     |
| **Reminders**     | A one-time nudge to people who were sent or shown the survey but didn't respond          |
| **Actions**       | Rules that run when certain answers are given — webhooks, emails, integrations, Shopify  |
| **Analysis**      | Sentiment analysis and smart classification of responses                                 |
| **Shopify**       | Writing responses, tags and customers back to your Shopify store (Shopify accounts only) |

Every tab shares one **Save Changes** button.

{% hint style="info" %}
Looking for how the survey *appears* — pop-up timing, exit intent, hiding the close button? Those live under [Delivery](/polls/visibility-settings.md) and **Settings → General → Behavior**.
{% endhint %}

## Notifications

**Email notifications** decides when Zigpoll emails your team about this survey:

* **Email for every partial or complete response**
* **Email only for completed responses**
* **Email only when the respondent gave an email address**
* **Email only when there is a write-in**
* **Do not email me**

Notifications go to your account's recipients unless you enter different addresses in **Notification email recipients**. See [what a notification email includes](/notifications.md#what-a-notification-email-includes), plus account-wide recipients, weekly recaps and troubleshooting, in [Notifications](/notifications.md).

## Reminders

**Nudge Non-Responders** sends one reminder to anyone who was sent or shown the survey but hasn't answered. The reminder cancels itself if they respond first. Set the delay, and optionally customize the reminder subject (email) or message (SMS).

{% content-ref url="/pages/VCTpnYbnH8cUwmOfaIQU" %}
[Nudge Non-Responders](/polls/nudge-non-responders.md)
{% endcontent-ref %}

## Actions

The **Actions** tab runs actions at the **survey level**, based on how someone answers across your entire survey.

### How it works

1. Click **Add Action Logic** to create a new rule.
2. Set one or more **conditions** — for example "survey **is completed**", "survey **is partially completed**", or a specific question's answer. Conditions can be combined with AND/OR logic.
3. Choose one or more **actions** to trigger when the conditions are met.
4. Press **Save Changes**.

### Available actions

**trigger webhook** — Send a POST request to a URL with the full response data.

**send email** — Send an email template to the respondent (**send email to respondent**), to your notification recipients (**send email to myself**), or to addresses you enter (**send email to address**). **send survey request** emails the respondent another survey.

### Integration actions

If you have integrations connected, their actions appear automatically. For example:

* **Slack** — send a notification to a Slack channel
* **Jira**, **ClickUp**, **HubSpot** — create an issue, task or deal
* **Zendesk**, **Gorgias**, **Richpanel**, **Gladly** — open a support ticket or conversation
* **Notion** — add a row to a Notion database
* **Klaviyo** — **subscribe to klaviyo list** adds the respondent to a Klaviyo list you pick. Use it when only some respondents should join, for example those who give a certain answer. See [Klaviyo](/integrations/klaviyo.md#adding-respondents-to-a-list) for list options and the marketing-consent warning
* **Mailchimp**, **Drip**, **Brevo**, **dotdigital**, **Omnisend**, **Marketo** — subscribe or add the respondent as a contact
* **Braze**, **RudderStack**, **Customer.io**, **Attentive**, **Iterable**, **Permutive** — track the response on the respondent's profile
* **Google Sheets** — write response data to a Google Sheet. Zigpoll creates the sheet automatically when you save, with headers based on your survey questions — you'll be emailed a link when the first response comes in. See [Sync Survey Responses to Google Sheets](/tutorials/sync-survey-responses-to-google-sheets.md)

### Shopify actions

If you have a Shopify store connected, these actions are available:

* **add tag** → **add customer tag** / **add order tag**
* **add metafield** → **add customer metafield** / **add order metafield**
* **generate reward** → **generate discount code**, **add store credit**, **add free shipping**

{% hint style="info" %}
Actions that require an email address (Klaviyo, Mailchimp, Drip, Omnisend and similar) only fire if Zigpoll has one for the respondent. Shopify tag and metafield actions only fire when the response is tied to a Shopify customer or order — see [Why a customer tag doesn't appear](#why-a-customer-tag-or-metafield-doesnt-appear).
{% endhint %}

### Saving the answer with `{{ value }}`

Tag and metafield actions take a value. Enter `{{ value }}` to save the submitted answer instead of fixed text. One rule then covers every answer option, instead of one rule per option. For tags, pick **response** in the dropdown next to the field, and Zigpoll fills in `{{ value }}` for you.

* On a question's own logic, `{{ value }}` is that question's answer.
* On the Workflows **Actions** tab, `{{ value }}` is the answer to the first question named in the rule's conditions. If the rule only says "survey is completed", it's the first answered question in the survey.
* For a multi-select answer, `{{ value[0] }}` is the first selected option, `{{ value[1] }}` the second, and so on.

**Why a literal `{{value}}` shows up in Shopify.** The placeholder must be the whole value. Zigpoll only replaces it when the field holds nothing but `{{ value }}` (spaces don't matter) or `{{ value[n] }}`. Anything else is written exactly as typed:

* Text around it, like `survey-{{ value }}` — write a fixed tag instead, or tag with `{{ value }}` alone.
* Other brackets, like `{value}` or `[[value]]`.
* `{{ value }}` typed into **Shopify Customer Tag** on the Shopify tab. That field is always a fixed tag; use an **add customer tag** action for answer-based tags.

On the Actions tab, if no answered question can be found for the rule, Zigpoll skips the write rather than saving the placeholder.

### Reacting to the AI analysis

A rule can read what Zigpoll's analysis found in the typed answers instead of an answer itself. Pick **its AI analysis** (under **The response**) as the rule's source, then the key: the response's **sentiment**, the **sentiment about** any topic from the Analysis tab, its **classification** label, whether the **answer quality** is low, whether it **contains personal data**, whether the respondent **wants a reply**, the **churn risk**, or any **field** you extract. For example: *AI analysis → sentiment about Shipping → is → very negative → send Slack notification*, or *churn risk is high → add customer tag "at-risk"*.

These rules fire a little after the response, once the analysis has run (usually within a minute), and only for responses with typed answers. The other rules in the same row are evaluated at the same time, so you can combine "survey is completed" with an analysis condition.

Emails sent by these rules can quote the analysis. In the email template, use `{{ sentiment }}` for the response's overall sentiment, `{{ sentiment_shipping }}` for the sentiment about a topic (the topic's name in lowercase, with spaces as underscores), `{{ classification_label }}` for its label, `{{ churn_risk }}`, and `{{ field_competitors }}` for an extracted field. For example, a rule *AI analysis → sentiment → is → very negative → send email to myself* with the subject `{{ sentiment }} response: {{ classification_label }}`.

These tags fill in only for emails sent by a rule that reads the AI analysis. An email action with no analysis condition goes out with the response, before the analysis has run, so the tags are empty there.

### Combining multiple actions

You can add multiple actions to a single rule. For example, when a survey is completed you could send a Slack notification, create a Jira issue, and subscribe the respondent to a Klaviyo list. Adding the same tag to both the customer and the order is fine. Shopify never stores a tag twice on the same record.

You can also create multiple independent rules with different conditions and actions by clicking **Add Action Logic** again.

## Analysis

Zigpoll reads the text your respondents type (Short Answer, Long Answer and the text fields of a Form) as each response arrives, usually within a minute. Choices, ratings, dates and files are never sent for analysis. Every written answer in the survey is analysed; the settings below switch each kind of analysis on or off for the whole survey. Analysis starts from the moment you turn a setting on; earlier responses aren't filled in.

The examples below all use one question, "What almost stopped you from buying?", and these three answers:

> **A:** "Shipping took two weeks and nobody answered my email." **B:** "I compared you with Glossier first, but the scent won me over." **C:** "asdf"

### Sentiment analysis

On by default. Each typed answer gets a sentiment from very negative to very positive, and the response as a whole gets one too.

| Answer | Sentiment     |
| ------ | ------------- |
| A      | Very negative |
| B      | Positive      |
| C      | Unclear       |

The survey dashboard shows a Sentiment tile (0 to 100, where 50 is neutral) with its daily trend, and a card with the mix of levels. The Responses page shows a sentiment pill beside each written answer, and the Participant and Reports pages show each person's overall sentiment. You can filter responses by sentiment.

### Sentiment topics

Overall sentiment tells you how people feel; topics tell you what about. Add up to five things you care about, each with an optional description of what counts.

For example, add **Shipping** (*delivery speed, cost or tracking*) and **Price**:

| Answer | Shipping      | Price         |
| ------ | ------------- | ------------- |
| A      | Very negative | not mentioned |
| B      | not mentioned | not mentioned |

The dashboard's Sentiment by topic card shows how often each topic comes up and how people feel about it, so "12% of responses mention shipping, and 80% of those are negative" is one glance. You can filter responses by a topic's sentiment.

### Suggest Topics

Not sure which topics to track? Click **Suggest Topics** under the topics list. Zigpoll reads the survey's recent written answers, groups the ones that talk about the same thing, and offers each group as a topic with the share of answers it covers, for example **Shipping 18%**, **Scent 11%**, **Packaging 6%**. Click one to add it. It needs at least 40 written answers, and it changes nothing until you add a topic and save.

### Smart classification

Sorts each response into one of your own labels. Turn it on, enter your labels, and give each a short description so Zigpoll knows when to use it.

For example, labels **Delivery** (*shipping and arrival problems*), **Product** (*how the item looks, smells or works*) and **Support** (*contacting the team*):

| Answer | Label            |
| ------ | ---------------- |
| A      | Delivery         |
| B      | Product          |
| C      | *(unclassified)* |

A response that doesn't clearly fit any label is left unclassified rather than forced into one. The dashboard's Classification card shows the breakdown, and you can filter responses by label. With a single label, Zigpoll checks whether each response fits it.

### Extract fields

Pulls specific facts out of what people write and saves each one as its own field on the response. Use it when written answers often contain something you'd like to count or filter by, but you don't want to read every answer to find it.

For example, add a field named **Competitor** with the description *rival brands they compared us with*:

| Answer | Competitor |
| ------ | ---------- |
| A      | *(blank)*  |
| B      | Glossier   |

To add a field, type its name and describe what to look for. Each field is saved as text, and when a response mentions several they're all kept: "I compared Glossier and Rare Beauty" gives *Glossier, Rare Beauty*.

The description is what Zigpoll goes by, so say what counts: "rival brands they compared us with" works better than "brands". A response that doesn't mention the fact is left blank rather than guessed. Each field appears on the response, in the Responses filter under Analysis, in the cross-tab, and as a condition in Action Logic.

### Flags

Every analysed response is also checked for four things, with no setup:

| Flag                   | Set when                                                       | Example                        |
| ---------------------- | -------------------------------------------------------------- | ------------------------------ |
| Wants a reply          | The respondent asks for help, a refund or any follow-up        | A ("nobody answered my email") |
| Churn risk             | They say or imply they won't buy again (medium or high)        | A                              |
| Contains personal data | A name, email, phone number or address is typed into an answer | "Call me on 555 0134"          |
| Answer quality: low    | The answer is gibberish or placeholder text                    | C                              |

Flags appear in the Responses filter under Analysis and as Action Logic conditions. Low-quality answers are also left out of Zigpoll's patterns and themes.

### Acting on the analysis

Every result above can trigger an action. On the **Actions** tab, pick **its AI analysis** as the rule's source; see [Reacting to the AI analysis](#reacting-to-the-ai-analysis). For example: *its AI analysis → wants a reply → is → yes → send Slack notification*, or *its AI analysis → sentiment about Shipping → is → very negative → add customer tag "shipping-issue"*.

## Shopify

Shown for Shopify accounts only. These settings write survey data back into Shopify whenever a response is tied to a matching order or customer.

| Setting                                  | What it does                                                                                                                                                                                |
| ---------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| **Write to order details**               | Adds each answer to the order's **Additional Details** section.                                                                                                                             |
| **Write to order notes**                 | Adds the answers to the order's **Notes**.                                                                                                                                                  |
| **Write to customer notes**              | Adds the answers to the Shopify customer's notes.                                                                                                                                           |
| **Write to customer metafields**         | Writes each answer to its own metafield on the customer, for use in Flow, segments and themes. Turning it on shows **Metafield Namespace**.                                                 |
| **Tag customers**                        | Tags the Shopify customer. Set the tag in **Shopify Customer Tag** (default `Completed Zigpoll Survey`). On by default.                                                                     |
| **Create new customers**                 | When a response includes an email that isn't a Shopify customer yet, creates the customer.                                                                                                  |
| **Accepts marketing**                    | See [below](#what-accepts-marketing-does).                                                                                                                                                  |
| **More Options → Order lookup attempts** | Shopify processes orders asynchronously, so order data can lag the response. Zigpoll retries the lookup by default; set it lower if you'd rather your actions and integrations fire sooner. |

{% hint style="info" %}
Tag, metafield, discount and store-credit writes that depend on *how* someone answered are rules on the [Actions](#shopify-actions) tab, not here.
{% endhint %}

### When Zigpoll writes to Shopify

Everything on this tab, the Shopify actions, and the [Shopify Flow](/shopify-app/shopify-flow.md) triggers run together, once the response settles:

* **About a minute after the last question**, when the person completes the survey.
* **About 10 minutes after their last answer**, when they stop partway, or when **Allow edits** is on. Partial responses are written too.

For order-based surveys, Zigpoll then looks up the order, retrying for several minutes if Shopify hasn't finished processing it (see **Order lookup attempts**). So a tag or note can take a few minutes to appear. Refresh the customer or order in Shopify before assuming it failed.

{% hint style="info" %}
**Only want to tag completed responses?** **Tag customers** also runs for partial responses. Turn it off, then on the **Actions** tab add a rule: survey **is completed** → **add customer tag**.
{% endhint %}

### Order Details and Order Notes reach other systems

{% hint style="warning" %}
Order **Additional Details** and **Notes** aren't private to Shopify admin. Packing slip templates, 3PL and fulfillment-app imports, and ERPs may print or import them. If survey answers are turning up on packing slips or breaking an order import, turn those two settings off.
{% endhint %}

Zigpoll's post-purchase templates turn **Write to order details** on. To stop writing to the order while keeping the data in Shopify:

1. Open the survey and go to **Settings → Workflows → Shopify**.
2. Turn off **Write to order details** and **Write to order notes**.
3. Keep **Write to customer metafields** on, or add an **add order metafield** action on the **Actions** tab if you need the answer on the order.
4. Press **Save Changes**.

Metafields aren't printed on packing slips or sent to fulfillment apps unless something is set up to read them.

**What Zigpoll writes on the order:**

* **Additional Details:** one line per question. The name is `Zigpoll:` followed by the question's handle; the value is the answer. Options in a multi-select answer are separated by the delimiter set under **Settings → Data Export → Delimiter** (a comma by default). For a form question, each field is written as `Label: value`, and repeated labels are numbered (`Preferred Time 1`, `Preferred Time 2`).
* **Notes:** a block between `*** Start Zigpoll ***` and `*** End Zigpoll ***`, one `handle: answer` line per question. A later write replaces the block instead of adding another.

**Colons or slashes break my importer.** The field names can't be renamed, and `Zigpoll:` always contains a colon. You can remove special characters from the rest: open the question, turn on **Custom handle**, and enter a plain handle. Slashes inside an answer come from the answer option text. If the importer still rejects the fields, turn off **Write to order details**.

### Metafield namespace and key

Use these to find Zigpoll's data in Shopify Flow, customer segments and Liquid.

**Write to customer metafields** writes one customer metafield per question:

* **Namespace:** the **Metafield Namespace** field. If you never change it, Zigpoll writes to `zigpoll`.
* **Key:** the question's handle. That's the question title, unless you set a **Custom handle** on the question.
* **Type:** `multi_line_text_field`. If you've already created a metafield definition with that namespace and key and a different type, Zigpoll retries with the definition's type.

To pick an exact namespace and key for one question, open the question and turn on **Custom metafield configuration**, in the question's **Tracking** settings card. It appears once **Write to customer metafields** is on. Enter a **Namespace** and **Key**, such as `zigpoll` and `hear_about_us`. A short key is much easier to reference than a full question title.

**add customer metafield** and **add order metafield** actions take the namespace and key together as `namespace.key` in the first box, and the value — fixed text or `{{ value }}` — in the second.

In Shopify Flow, reference the metafield by that namespace and key, for example `zigpoll.hear_about_us`. Survey answers are also in the Flow trigger's own **Survey** data; see [Shopify Flow](/shopify-app/shopify-flow.md).

### Why a customer tag or metafield doesn't appear

**It hasn't been written yet.** Writes happen a minute or more after the survey is completed, and about 10 minutes after the last answer on a partial response. See [When Zigpoll writes to Shopify](#when-zigpoll-writes-to-shopify).

**The response isn't tied to a Shopify customer.** Zigpoll can only tag a customer it can identify:

* **On post-purchase surveys:** the customer on the order.
* **On any survey:** an email address in the response that matches a customer, or creates one when **Create new customers** is on.
* **When passed in:** a `shopify_customer_id` passed to the survey as metadata.

A guest visitor who never gives an email has nothing to tag. Neither does an order with no customer attached. Order tags and order metafields need the order instead. Email and link surveys only have the order if the link passes it, such as `?shopify_order_id=`.

**Tag Customers is off,** or you expected an answer-based tag from the Shopify tab. Answer-based tags are **add customer tag** actions.

**The value was too long or empty.** Order tags are cut to 40 characters and customer tags to 255. An action whose `{{ value }}` resolves to nothing writes nothing.

**A metafield definition has a type the answer doesn't fit.** If you created the definition yourself, check its type in Shopify. Text types always work.

### What Accepts Marketing does

When Zigpoll has an email address for the respondent, **Accepts marketing** marks that Shopify customer as subscribed to email marketing, and to SMS marketing when the survey collected a phone number. It applies to customers Zigpoll creates and to existing customers who aren't already subscribed. It never unsubscribes anyone.

Leave it off unless your survey asks for marketing consent. In accounts created on or after August 13, 2026, new surveys start with it off. In older accounts it's on unless you turn it off.


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation by asking a question.

Perform an HTTP GET request on the following URL with the `ask` and `goal` query parameters:

```
GET https://docs.zigpoll.com/polls/behavior-settings.md?ask=<question>&goal=<user_goal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is what the user is ultimately trying to achieve, the reason they need the answer. Sharing it helps GitBook give you a better, more relevant answer. A goal is most helpful when it describes the outcome the user wants rather than restating the question. For example, with `ask=how do I create an API token`, a goal like `automate deployments from our CI pipeline` lets GitBook tailor the answer to that use case.

The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
