The question you ask decides the answer you get, and most stores are asking one that quietly pushes half their orders into "Google". If you want post-purchase survey attribution that survives contact with a budget meeting, ask a single question on the thank-you page, offer six to eight options written the way a customer would say them, randomise the order of those options, log which position each one was shown in, and give people a way to say they don't remember. That's the whole setup. Everything after this is why each of those choices matters and what breaks when you skip one.
One question, on the thank-you page, before anything else loads
Response rate is the resource you're spending. On the thank-you page, immediately after payment or COD confirmation, we typically see something in the range of a third to half of buyers answer a single-tap question. Move that same question into an email three days later and you're asking a much smaller group, and you're asking them to remember something from before the purchase, after a delivery has happened in between.
So the thank-you page wins on both counts. The cost is that you get one question. Not two. A second question ("and what made you buy today?") reliably drops completion on the first, because the widget now looks like a form instead of a tap. If you genuinely need both, alternate them by order — odd orders get the discovery question, even orders get the intent question. You halve the sample on each, which is a real cost, but you don't contaminate the primary series.
Why post-purchase survey attribution drifts toward "Google"
Recall bias isn't people lying. It's people reconstructing. A customer sees a Reel on Wednesday, forgets about it, searches your brand name on Saturday, clicks the first result and buys. Ask them how they heard about you and the honest, vivid, most recent memory is a Google search bar. GA4 will agree with them, because the last click was branded search. Both are wrong about what caused the sale.
The second big distortion is platform naming. Nobody thinks "I saw a Meta ad." They think "I saw it on Instagram." If your option list says "Facebook / Instagram ads", you're asking a shopper to classify their own memory as paid or organic, which they cannot do and shouldn't have to. And in India there's a third one we run into constantly: a WhatsApp broadcast from the brand gets remembered as Instagram, because that's where the customer follows you. Influencer content gets remembered as an ad. Ads from a creator collab get remembered as "a friend told me".
You cannot fix this with a cleverer question. You can only stop making it worse.
The wording that works, and three that don't
What we use as the default:
Where did you first hear about us?
"First" does real work. It anchors the memory to discovery rather than to the last thing that happened, and it gives the respondent permission to skip past the branded search they just did. It won't fully suppress recency, but it moves the needle.
Three versions we'd avoid:
- "How did you find us?" — "Find" describes the last click. You'll get search and direct, and you'll have paid for a survey that tells you what your analytics already told you.
- "What made you buy today?" — a fine question, but it's about conversion motivation, not channel discovery. Mixing it into a channel list produces answers like "the discount" sitting next to "Instagram", and now your percentages don't sum to anything meaningful.
- "How did you hear about our brand?" with "Word of mouth" and "Friend or family recommended us" both in the list. Those overlap. Two options that mean the same thing split one real channel in half and it looks like neither matters.
Every option in the list has to be something a customer could pick without thinking about whether another option also applies. If you find yourself explaining the difference between two options, delete one.
Option ordering: randomise, then log the position
Fixed lists get gamed by human laziness. In a tap-to-answer widget, the first two options take a disproportionate share, and the last one gets a small bump. Put "Instagram" at the top for six months and Instagram looks like your best channel for six months.
Randomise the order per session. Then — and this is the part almost everyone misses — store the position each chosen option was displayed in, alongside the answer. You need it for two reasons. First, it lets you check whether position bias is actually present in your data rather than assuming it. If the option shown in slot 1 is picked 30% of the time and the same option in slot 5 is picked 18% of the time, you now know the size of your problem and can weight for it. Second, randomisation quietly makes month-on-month comparison noisier, and the position log is what lets you separate that noise from a genuine channel shift.
Keep "Other" and "I don't remember" pinned to the bottom, outside the randomisation. They're escape hatches, not options. If "I don't remember" is running above roughly 15%, your question is too far from the purchase or your list is missing a channel people actually use.
Write the options in the customer's language, not the media plan's
The list should read like things that happened to a person. "Saw a video on Instagram or YouTube." "A friend or family member told me." "Searched on Google." "Saw it in a WhatsApp message from you." "Read about it in an article or blog." "Saw your store or a stall." "Amazon or Flipkart."
Notice that none of those separate paid from organic. That's deliberate. The customer doesn't know, and forcing the distinction produces confident garbage. If you need paid-versus-organic split for a channel, get it from the platform and the survey together: the survey tells you the channel's true share of discovery, the platform tells you the split within it.
Cap the list at eight. Past that, scanning cost rises, satisficing rises, and people pick something plausible from the top of the list instead of reading to the end. If you have nine channels, the ninth one is small enough to live inside "Other" and be recovered from the free-text field.
Speaking of which: keep a free-text box behind "Other", read it monthly, and treat it as a qualitative sample rather than a channel. It's where you discover that a regional-language YouTube reviewer has been sending you orders for two months.
The arithmetic of a usable sample
People act on survey shifts that are pure noise, so do this calculation once and pin it somewhere.
Say you do 1,200 orders a month and 40% answer. That's 480 responses. A channel sitting at 20% of responses has a standard error of √(0.2 × 0.8 / 480) = √0.000333 ≈ 0.018, so about 1.8 percentage points. A 95% interval is roughly ±3.6 points. Which means 20% last month and 23% this month is not a change. It's the same number twice.
To call a 3-point move on a 20% channel with any confidence you'd need something in the region of 1,700 responses, so at a 40% response rate, roughly 4,250 orders in the period. If you're doing 1,200 orders a month, that's a quarter, not a month. Read the survey quarterly for channel share, and use the monthly numbers only for direction and for spotting something appearing that wasn't there before.
The one exception is festive season. Volume triples, so the sample gets good fast, but the mix genuinely changes too. Compare Diwali to last Diwali, never to October.
COD, RTO and which responses you count
If a meaningful share of your orders are cash on delivery, decide up front whether an attribution response attached to an order that later gets returned to origin stays in the denominator. We usually exclude RTO'd orders from the channel-share calculation and keep them in a separate cut, because the channel that brings you unpaid orders is a thing you want to see. A creator audience that converts at high volume and RTOs at 30% is not the same channel as one that pays online.
Practically, that means the survey response has to be stored against the order, not just aggregated into a dashboard. Which brings us to plumbing.
Where this lives in a Shopify store
Thank-you page and order status page extensions are available across plans now, so you don't need Plus to run a one-tap survey after checkout. Editing the checkout steps themselves is still a Plus capability, and if you're weighing that decision on other grounds, our notes on when Shopify Plus is worth the jump cover it honestly.
Store the answer as an order metafield or an order attribute, along with the displayed position index and the survey version string. The version string matters more than it sounds: the day you change a single option label, the series changes, and six months later nobody will remember when. Tagging the order also works and is easier to filter in the admin, though tags get messy at volume.
Most off-the-shelf survey apps will not give you the position index. If the position log matters to you — and if you're spending real money on paid social, it does — that's a small custom build on the thank-you page extension rather than an app subscription. It's a day or two of work for a developer who's done it before. Our Shopify developers in India do these as one-off engagements often enough that we've stopped quoting them as projects.
Reading the survey against GA4 and Meta without fooling yourself
The survey is not truth. It's a second opinion from a witness with a bad memory but no financial interest. Use it three ways.
Compare shares, not absolutes. If Meta's reported conversions add up to 55% of your orders and the survey says Instagram plus Facebook discovery is 28%, you've found the size of your over-attribution gap. Track that gap over time rather than trying to pick a winner.
Watch the branded-search share. If "Searched on Google" climbs while your paid social spend climbs, that's usually demand generation showing up in the wrong bucket, not search suddenly getting better. This is also the argument for treating branded search and content as one system rather than two line items, which is roughly how we approach SEO and content for D2C brands.
Use it to break ties on channels the platforms can't see at all. Offline, WhatsApp, referrals, marketplace spillover, a stall at a weekend market. No pixel reports those. The survey is the only instrument you have, and for those channels it's better than nothing by a very wide margin.
Freeze the wording for a quarter
The temptation, about three weeks in, is to tweak. Add an option, reword one, move something. Resist it until the quarter closes. A survey whose wording changes every month produces a chart that looks like insight and is actually a record of your own edits. Set a date, change everything you want to change at once, note the version, and start a new series.
If you want a second pair of eyes on your current setup — the question, the list, where it fires, what it writes to the order — send it over as part of a free store audit. Most of the fixes are twenty-minute edits that change what the next quarter's numbers are worth.

