Two layers of attribution
There is no single “correct” attribution model. What matters is matching the right method to the decision you are making. Crux runs two complementary layers, each answering a different question.Deterministic (campaign level)
Per-order attribution, traced back to a real touchpoint by the waterfall below. Because every order is traceable to a source, campaign or creative, this is the layer you use for within-channel optimisation: improving paid social, comparing influencer codes, or cutting CAC on a specific channel.
Modelled (channel level)
A modelled layer on top of the waterfall that redistributes residual, non-actionable traffic across your real acquisition channels using post-purchase survey data. Because it is modelled rather than traced to a single order, this is the layer you use for cross-channel strategy and budget decisions: how channels compare, and where the next pound should go.
The six layers
GA4 raw event data
We sync your raw GA4 event data straight into BigQuery. This bypasses the sampling, unnattributed & data processing issues you see within the GA user interface. GA4 tracks events (page views, clicks, add to carts, purchases etc), landing pages and UTM parameters across your site. When a customer purchases, we match their session history to the Shopify order.This captures paid search, Meta ads, email clicks, and any UTM-tagged traffic. We look at the users first ever event on the website (that is not Direct or Unknown) for the attribution source. We also don’t bound this by time, meaning if you have a long purchase cycle (60+ days) we cater for that unlike GA standard reporting.This first event (click) model using raw ga4 data typically accounts for 60 - 70% of your order attribution.
Discount codes
Discount codes are mapped to channels, campaigns and ad groups via your configuration sheet. When a customer searches for your brand after seeing an influencer post, or being referred by a friend. We use the discount code at checkout to correctly attributes the order, even though GA4 saw it as direct or brand traffic.This is particularly valuable for influencer, referral program, direct mail, offline (out of home, tv), partnership and affiliate channels where customers often navigate directly rather than clicking a tracked link.
Shopify customer journey
Shopify independently tracks the last non-direct touchpoint before purchase. This is used as a fallback when GA4 and discount codes both return Direct or Unknown.Shopify’s journey data captures social media referrals, search engine visits and other touchpoints that GA4 may have missed due to tracking blockers or cookie restrictions.
Klaviyo email and flows
Klaviyo records which campaign or automated flow a customer engaged with before they purchased. When an order is still attributed to a low-intent channel (Unknown, Direct, Self Referral, Organic Search or Paid Search - Brand) and Klaviyo attributed it to a campaign or flow, we credit the order to Email.This recovers revenue driven by newsletters, promotions and lifecycle automations (welcome, abandoned cart, win-back) that customers often act on without clicking a tracked link. The override only replaces low-intent channels: a genuine paid or generic click always keeps its credit, so email never inflates itself at the expense of your acquisition channels. Recovered orders are credited to the Email channel (CRM group) and stamped with the Klaviyo campaign or flow name.
Post-purchase surveys
First-party data from “How did you hear about us?” surveys (such as Fairing, Kno or Triple Whale) provides a fallback for orders still attributed to Unknown, Direct, or Paid Search Brand.Surveys capture channels with no digital footprint: word of mouth, podcast mentions, TV ads, in-store recommendations, and other offline touchpoints that no click-based system can detect.
First-click vs last-click
Crux captures both first-click and last-click attribution for every order, giving you two complementary views of your marketing performance. First-click shows which channel introduced the customer to your brand. Last-click shows which channel drove the purchase. Both are valuable, but they answer different questions. First-click is the default across all Crux dashboards because it best measures acquisition activity, complemented by discount codes and post-purchase surveys. Last-click is surfaced for visibility and used primarily in CRM reporting (email and SMS channels), since those are low-funnel touchpoints that close sales rather than introduce customers. Example: A customer discovers your brand through a Meta ad (first-click), then returns two weeks later via a Google brand search and purchases (last-click). Both touchpoints are captured. The Meta ad gets credit in the first click model, while the Google search gets credit for the conversion in the last click model.In your Orders report, fields prefixed with “Last Click” show last-click data. Fields like Source, Medium, and Channel show the primary first-click attribution.
What happens to unattributed orders
After all six layers have been evaluated, any remaining orders are labelled as Unknown or Direct. These are genuine cases where no trackable touchpoint exists, typically caused by privacy-focused browsers, VPNs, or customers who typed your URL directly without using a discount code. Most brands see 75-85%+ attribution coverage after the full waterfall, meaning only a small percentage of orders remain truly unattributed. At order level we leave these honestly as Unknown or Direct rather than guess a source we cannot see. For cross-channel and budget views, the modelled layer below resolves this residual pool.Modelled channel re-attribution
Even after the waterfall, a residual pool of low-signal traffic remains: orders that still resolve to Unknown or brand search, where no touchpoint reliably tells you where the customer first came from. At order level that is honest, we do not invent a source we cannot see. But at channel level it masks real performance, because some of those customers were introduced by Meta, TikTok, an influencer or YouTube, and leaving them in an “Unknown” bucket understates the channels that actually drove them. For cross-channel strategy and budget decisions, we resolve that pool with a modelled layer on top of the waterfall. It redistributes the residual pool across your real acquisition channels, in proportion to what customers tell us in your post-purchase survey (“How did you hear about us?”). If, over the recent period, surveyed customers name Meta 40% of the time, an influencer 35% and TikTok 25%, the Unknown and brand-search pool for that period is split the same way.Rolling survey window
We use a rolling window of recent survey responses, widening it (7 to 14 to 30 days) until there are enough responses to be reliable. This keeps the split current as your channel mix shifts, rather than applying a stale, all-time average.
Volume thresholds
Redistribution only runs when there is enough survey volume to trust the split; below that threshold the pool is left untouched. Individual channels with too few responses are excluded, so survey noise never creates a spurious channel.
The modelled view powers cross-channel comparison on the Channel Performance report and feeds budget optimisation. Your deterministic, order-level Orders report is unchanged: it always shows the traceable attribution, with residual orders left honestly as Unknown or Direct.
Need help? Contact our team or book a demo.