Click-based tracking leaves a large share of orders in direct, brand search and unknown, where there is nothing to optimise. We build two layers to move those orders into channels you can set a budget against.
Watch the video walkthrough →Each order is checked against up to six sources, in a fixed order, until one of them names a channel.
The orders the waterfall could not place are split across channels in the shares your surveyed customers gave.

Every model credits some channels too much and others too little. What matters is knowing which way yours leans before you move budget from Meta to TikTok, or pause a creator. We read attribution at two levels, because they answer different questions.
"Where does the next hour go?"
How Meta compares with Google, influencer, organic and email, and how much budget and time each one gets next month. The question is about totals, so it can take some modelling: not every order has to be traced to a single click.
"Which ad, creator or keyword do we change?"
What is working inside one channel: the creators to rebook, the ads to pause, the codes that convert. Every order has to trace back to a real touchpoint, so nothing here is modelled.

| Model | Which way it leans |
|---|---|
| Last click | Credits the final touch. Brand search, retargeting and affiliates collect orders that Meta, YouTube or a creator started. |
| Ad platform reports | Each platform sees only itself. A customer who sees a Meta ad, then buys through a Google brand ad, is one order in Shopify and one conversion in each platform. |
| GA4 standard reports | Yesterday's orders sit in Unassigned for up to 48 hours while Google processes them, and some sources arrive as (not set) and stay that way. |
| Media mix modelling | Works for large shifts of budget between channels. It cannot tell you which creator or which ad is working. |
The first three depend on a click. Influencer, upper-funnel Meta and YouTube are mostly seen, not clicked: the customer searches your brand name later, or types the URL, and the order lands in brand search or direct.

| Read by | Credit goes to | Because |
|---|---|---|
| GA4 last click | Paid search, brand | It was the last click, and the only one. |
| Google Ads | Its own brand campaign | The platform counts every order its ad touched. |
| Attribution waterfall | Influencer, Gemma | The code at checkout is mapped to the creator in your config sheet. |

The customer's first visit that was not direct, read from the raw GA4 export with no time limit, so a 60-day purchase cycle still resolves. Settles 60–70% of orders.
The code at checkout, mapped in your sheet to a channel and a named partner. Catches influencer, referral, affiliate, podcast and out-of-home orders that arrive as direct or brand search.
Shopify's own record of the last touch that was not direct. Catches visits that ad blockers and cookie limits hid from GA4.
Where a survey is live, the customer's own answer to "How did you hear about us?" names the channel for their order.
What affiliate and influencer platforms such as Awin and Social Snowball write onto the Shopify order, and Shopify's own order source.
An order still in direct or unknown that Klaviyo ties to a campaign or flow goes to email. It never takes an order an earlier step has placed.
Whatever is left is reported as unknown or direct. At order level we never guess a source we cannot see.
An ad, a keyword, a code, a creator. That is why this layer is safe for campaign decisions.
It shows which channel introduced the customer. Last click is kept beside it, and used for email and SMS.
Channel rules, codes and survey answers live in a Google Sheet you edit. A new creator code is a new row, picked up at the next refresh.

We read the most recent period that holds enough answers to trust, and widen it until it does. Below that minimum the pool stays as unknown, so a handful of answers never swings a channel.
Total orders and revenue are the same before and after, and both still reconcile to Shopify. Brand search is in the pool because someone searching your name had already heard of you somewhere.
No single order is traced here, so it tells you how much to give Meta against influencer. It cannot tell you which ad or creator earned it. For that, read the waterfall.

| Layer oneAttribution waterfall | Layer twoModelled re-attribution | |
|---|---|---|
| What it does | Names a channel for each order, from the first of six sources that can | Splits the orders left in unknown, direct and brand search across channels, by survey share |
| Works on | One order at a time | Channel totals, day by day |
| Who has it | Every client | Clients with a post-purchase survey and enough answers coming through |
| Read it for | Which ad, creator, code or keyword to change | How channels compare, and where the budget goes |
| Do not read it for | Channel totals, while unknown and direct are still large | Any decision about a single campaign, ad or creator |
| Where you see it | The Orders report and each channel deep dive | The Channel Performance report |
In the waterfall, a customer's answer settles their own order. In modelled re-attribution, all the answers taken together settle the orders of customers who did not answer. Without a survey you still have the waterfall in full, minus step four, and what it cannot place stays as unknown.

| Channel | GA4 last click | Attribution waterfall | Plus modelled re-attribution |
|---|---|---|---|
| Direct and unknown | 3,000 | 1,300 | 0 |
| Brand search | 2,500 | 800 | 0 |
| Meta ads | 2,900 | 4,000 | 5,050 |
| Influencer | 400 | 1,900 | 2,530 |
| YouTube | 300 | 700 | 1,120 |
| 900 | 1,300 | 1,300 | |
| Total orders | 10,000 | 10,000 | 10,000 |
Illustrative figures. The total never changes. With no survey the last column does not exist, and the waterfall column is your channel view.

A code is the only signal that survives a customer who never clicks. One code per creator, not one shared across a campaign.
Put the platform's campaign and ad IDs in the link, not their names. A name gets edited or reused; an ID never changes, so the order still matches the ad that earned it.
One question at checkout: "How did you hear about us?" It adds step four to your waterfall and switches on layer two. We set it up and map the answers.
Every step of the waterfall, the config sheet reference and the questions clients ask most. For anything about your own numbers, email [email protected] or message us on Slack.