> 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/tutorials/attribution-surveys.md).

# Attribution Surveys

Ask buyers how they found you and see which marketing channels actually drive sales

An attribution survey asks your customers a simple question: "How did you find out about us?" This gives you reliable first-party data about which marketing channels are actually working, beyond what pixel data and ad platform reports tell you.

#### Why Use Attribution Surveys?

* Ad platforms grade their own performance, which can be inaccurate
* Some channels like word of mouth are impossible to measure with pixels
* First-party survey data helps you validate and optimize your marketing spend

Across 3.3 million order-linked answers, word of mouth is the second-largest channel in ecommerce, and analytics loses 59% of those sales against 40% of Facebook sales. See [what brands have learned about attribution](/guides/what-brands-have-learned.md#post-purchase-attribution-the-channels-you-fund-are-not-the-channels-that-work) and what they did about it.

#### Setting Up an Attribution Survey

1. Go to **Surveys → New Survey**.
2. Select the **Attribution** template (under *Attribution & Discovery*), or build your own.
3. Add a question like "How did you hear about us?" with your marketing channels as answer options.
4. Include an open-ended "Other" option so customers can fill in channels not listed.
5. Optionally add a reward question to incentivize responses.

#### Where to Place Your Attribution Survey

* **Post Purchase Page** — Tracks the customers who convert and gets a high engagement rate.
* **First Landing Page** — Casts a wide net to understand where all traffic comes from.
* **Post-purchase email** — Reach customers after they've had time to reflect on their purchase experience.

#### Interpreting the Data

Once you have a meaningful number of responses:

* Compare the survey results to your existing pixel data
* Identify which channels actually convert to customers
* Identify which channels are underperforming or overperforming
* Use this data to reallocate your marketing budget

{% hint style="info" %}
Zigpoll automatically tracks and correlates order values with each response. This lets you see not just where customers come from, but which channels drive the highest-value orders.
{% endhint %}

#### Reported Channel and Source

Zigpoll reads every answer to your attribution question and files it under a channel. There is nothing to set up. A few minutes after a response comes in, Zigpoll adds two metadata keys to it:

* `attribution_channel`: one value from a fixed list, such as `instagram`, `search`, `podcast` or `word_of_mouth`.
* `attribution_source`: the name the customer gave, when there is one, such as "The Daily", "@somehandle", "Wirecutter" or "ChatGPT".

Your fixed answers are mapped from their wording. "Google Search" becomes `search`, "Friends or family" becomes `word_of_mouth`, and "ChatGPT / Claude" becomes `ai_assistant`. This works in whatever language your options are written in. No AI model is used, and your sentiment and AI settings don't affect it.

On the **Charts** page the two keys are **Reported Channel** and **Reported Source** in the **Answers by** picker (see [Reported channel and source](/analytics-ai-and-reporting.md#reported-channel-and-source)). They are also in the Responses filter, in CSV exports as `Survey Metadata: attribution_channel` and `Survey Metadata: attribution_source`, in the Reporting API and the `analyze_attribution` [MCP](/integrations/mcp.md) tool, and in every integration that receives response metadata: webhooks, Zapier, Make, n8n, Klaviyo, Customer.io, Iterable, Braze, Attentive, Omnisend, Segment, Shopify Flow and Google Sheets, where they arrive as two new columns. The full list of values is in [Special Variables](/embed/poll-metadata/special-variables.md#reported-attribution-metadata).

#### "Other" Write-Ins Are Read Automatically

What customers type into "Other" is read the same way as your fixed answers, so a write-in lands on the channel it belongs to instead of staying in an "Other" pile.

| The customer typed                     | Reported Channel    | Reported Source                        |
| -------------------------------------- | ------------------- | -------------------------------------- |
| insta                                  | `instagram`         |                                        |
| chat gpt                               | `ai_assistant`      | ChatGPT                                |
| bin schon Kunde                        | `existing_customer` |                                        |
| costco                                 | `retail_store`      | Costco                                 |
| Something that matches no channel      | `other`             | The cleaned-up text of what they typed |
| me, don't remember, or a single period | `unknown`           |                                        |

#### Follow-Up Questions for the Named Source

"Podcast" tells you the channel. To learn which podcast, ask a follow-up question that only the people who picked that answer see. Zigpoll uses the follow-up's answer as the Reported Source.

For example, to send the *Podcast* answer to a "Which podcast?" question:

1. Add the follow-up directly after your attribution question. Use a **Short Answer** question titled "Which podcast?", or an **Autocomplete** question listing the shows you sponsor, with a **Write-in Answer** for the rest. Autocomplete keeps the spelling of the listed shows consistent.
2. Open the follow-up (**Questions →** the question **→ Details**) and click **Add Presentation Logic**.
3. Set it to **show** when the attribution question **= (is equal to)** *Podcast*. For a Multiple Choice attribution question use **includes any**.
4. Click **Update Question**.

Do the same for any other answer that has a name behind it, such as *Instagram* to "Which account did you see?" or *Influencer* to "Who recommended us?". See [Branching](/questions/question-logic.md#branching-show-a-question-only-for-certain-answers) for how follow-ups are built.

Zigpoll recognizes a follow-up when its Presentation Logic names an answer to the attribution question. A follow-up reached through **Action Logic** on the attribution question (when the answer is *Podcast*, **Skip to** "Which podcast?") is recognized too, so surveys built that way need no changes. A question shown to everyone who answered the attribution question, whatever they picked, is not treated as a follow-up.

Follow-ups can be chained. If *A creator on social media* leads to "Where did you see the content?" (YouTube, Instagram, TikTok) and that leads to "Which creator?", the creator's name becomes the Reported Source, and the platform is used when no name was given. The deepest answer wins.

When the picked answer is only a bucket, such as *Other*, *Social media* or *I don't remember*, and the follow-up names a channel, the follow-up sets the Reported Channel: *Other* followed by "youtube" is reported as `youtube`. A specific pick keeps its channel; the follow-up only supplies the source.

A follow-up answer that names a platform or a tool Zigpoll knows is spelled its usual way, so "fb", "Facebook" and "FACEBOOK" are one row, and "chat gpt", "Chatgpt" and "gpt" are all ChatGPT.

Small spelling differences are folded together so one source is one row in your reports:

* "the daily", "The Daily" and "THE DAILY" all become "The Daily".
* "@Some.Creator" and "saw @some.creator" both become "@some.creator".

An answer longer than 40 characters, an email address or a phone number never becomes a source. Keep follow-ups short and specific ("Which podcast?") so the answers are names and not sentences.

#### If Your Question Isn't Detected

Zigpoll treats a question as an attribution question when three or more of its fixed answer options read as distinct channels: Instagram, Google, a friend, a podcast and so on. The title of the question doesn't have to be worded any particular way. A question that asks about habits instead of discovery, such as "Which platforms do you use most?", is not treated as one.

If **Reported Channel** isn't offered on the Charts page after new responses have come in, check the question's options:

* Give it at least three options that each name a recognizable channel. "Instagram", "Google Search" and "Friend or family" count. "Option A", a list of product names, or a single "Social media" option next to "Other" does not.
* Use a fixed-choice question. A question that is only a text box has no options to read.
* If the survey has more than one attribution question, only the first one in the survey's order is used. Put the one you want reported first. A choice question that is only shown after an answer to the first one, such as "Where did you see the content?", counts as a follow-up, not as a second attribution question.

#### Multi-Select Attribution Questions

If customers can pick more than one answer:

* When everything they picked belongs to one channel, that channel is the Reported Channel.
* When they picked several different channels, the Reported Channel is `multiple`, and a third key, `attribution_channels`, holds the channels as a comma-separated list (for example `instagram, podcast`).

A single-choice question gives a cleaner report, because each customer names the one channel they credit most. Use multi-select when you care about every touchpoint.

#### Anonymous Surveys

When a survey has [Anonymous mode](/polls/display-rules.md#anonymous-mode) turned on, Zigpoll writes `attribution_channel` only. `attribution_source` is never written, because it is the respondent's own words.

#### When the Data Appears

The keys are written about a minute after a completed response, and up to ten minutes after a partial one, so reports and integrations trail new responses by that much. Responses collected before this feature was released don't have the keys unless Zigpoll support runs a backfill for your account. Contact support if you want your history included.

#### Using "Other" to Decide Which Options to Add

A write-in that matches no channel is kept as `other`, with the cleaned-up text as its source. That turns the "Other" pile into a ranked list:

1. On the **Charts** page, open your attribution question and click the filter icon next to the date picker. Under **Attribution**, choose **Reported Channel**, then the `other` value.
2. In the **Answers by** picker, choose **Reported Source**.
3. Each row is something customers typed, with its responses, share and, where there is an order behind the response, revenue and AOV.

When the same source keeps showing up near the top, add it as a fixed answer option. If a channel such as `podcast` or `influencer` has a long list of sources under it, that answer is a good candidate for a follow-up question. Check again after a few weeks to see whether the **Other** row has shrunk. On the Charts page the channels are shown with readable names, so `other` appears as **Other** and `word_of_mouth` as **Word of mouth**.

For the deeper version of this — separating discovery from conversion, reconciling survey answers against your pixel data, and knowing the limits of self-reported attribution — see the full guide:

{% content-ref url="/pages/Iwn5ywxmSvccwtT1njra" %}
[How to Measure Marketing Attribution](/guides/how-to-measure-marketing-attribution.md)
{% endcontent-ref %}


---

# 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/tutorials/attribution-surveys.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.
