Marketing happens in places classic attribution will never see
We build one view of the journey, from first touch to closed revenue, so the channels creating demand stop showing up as traffic you cannot explain.
































Triangulated attribution means more than one source of truth, cross-checked
Click data sees part of the journey. Surveys see a different part. A holdout test answers a different question again. Each one is blind somewhere.
Running more than one means you find out when they disagree, which a single model can never tell you.
Which methods make sense depends on your channel mix. Nobody needs all of them.
We do not sell you a model. We build one you own.
What a triangulated model enables
Turn direct traffic into channels you can act on
Podcasts, events, communities and brand campaigns rarely end in a click. The credit does not vanish. It collects in direct.
Other inputs give those channels something to be counted on. None of them is precise, and we will say which parts stay uncertain.
Podcasts, word of mouth, people who typed your name
Engagement that happened before any site visit
Regional lifts from linear TV and radio impressions
Whether the channel caused anything at all
One journey per person, not one per platform
The CRM has the deal, the ad platforms have the spend, web analytics has the session, the app has the activation, billing has the revenue. Stitched together, one person's journey reads as a single ordered list of events, whichever system each one came from.
| Data source | Event name | Timestamp | Channel | Initiative |
|---|---|---|---|---|
| Google Analytics | page_view | 02/03/2026 09:14 | Newsletter Sponsorship | 021 Newsletter |
| post_engagement | 11/03/2026 20:41 | Organic Thought Leadership | ||
| Google Analytics | page_view | 30/03/2026 12:06 | Unknown | |
| Amplitude | sign_up | 03/04/2026 08:02 | ||
| Intercom | hdyhau_completed | 03/04/2026 08:04 | Newsletter Sponsorship | 021 Newsletter |
| Amplitude | workspace_created | 05/04/2026 11:20 | ||
| Google Analytics | page_view | 19/05/2026 14:58 | Organic Brand | |
| HubSpot | demo_requested | 19/05/2026 15:07 | ||
| HubSpot | email_clicked | 19/05/2026 15:12 | Webinar | Replacing Direct in Attribution |
| Luma | webinar_registered | 19/05/2026 15:14 | Webinar | Replacing Direct in Attribution |
| HubSpot | opportunity_won | 24/06/2026 16:30 | ||
| Stripe | purchase | 25/06/2026 09:00 |
Different stages get different models
In a sales-led company there are at least two questions, owned by different teams and answered by different data. One model stretched across both makes both of them wrong.
You set the rules, and they are written down
Every model runs on rules. Out of the box they are hidden, and somebody else picked them. Here you decide them with us, and they stay documented.
They live in an interface we built, so your marketers can read any rule in plain language and see what it does to the numbers, without asking a data team.
- Landed on
/open-source→ open-source touchpoint - LinkedIn engagement in the 30 days before first session → influenced touchpoint
- Survey answer "heard a podcast" → podcast touchpoint, no click
- Direct with no prior session → unattributed, not direct
The numbers get used, because your team can defend them
A number nobody can explain does not survive a budget meeting. When the logic is documented, the argument moves to the decision itself: shift the budget, keep funding the channel, or change the rule that produced the number.
| Model nobody can see into | Model your team owns |
|---|---|
| "Why is this number wrong?" | "Do we move budget out of this channel?" |
| Nobody can say where it came from | Anyone can trace it to a rule and challenge the rule |
| Decision gets made on instinct | Decision gets made on the number, or the rule changes |
What this looks like for different businesses
Sales-led B2B
Long cycles, revenue closing in the CRM months after the first click.
ROAS stays wrong until closed revenue connects back to paid.
Click data to the lead, CRM data from lead to won, survey responses for the touches with no click.
Web-to-app
The journey starts on the web, the conversion happens in the app.
Identity breaks at the join and one person gets counted as two.
Web and MMP data stitched into one journey before any model runs.
Subscription
The money arrives over months, not at the conversion.
Early revenue looks like all the revenue there is, so channels get judged on a fraction of what they returned.
Billing data joined to the journey, so channels get judged on realised revenue.
Brand-heavy consumer
Real money in linear TV, radio, out of home and podcast sponsorships.
Branded search and direct absorb the credit, so the channels creating demand look like the ones to cut.
Geo traffic patterns, survey responses, voucher codes and vanity URLs, cross-checked against the click model.
All models are wrong, butsome are usefulthis one is ours.
Where out-of-the-box attribution breaks
| One model out of the box | Triangulated | |
|---|---|---|
| Inputs | Clicks and sessions the tool can see | Observed, stated and statistical, chosen to fit your mix |
| Channels with no click | Counted as direct | Counted from surveys, geo patterns, holdouts, codes and vanity URLs |
| Funnel stages | One model for everything | A model per stage, matched to the team |
| Default model | Last click, and nobody on your team decided that | Chosen for your channel mix, and stated |
| Lookback window | A setting most marketers have never seen | A decision you made, written down |
| CRM revenue | Never makes it back into the number | Connected to the paid touchpoints that preceded it |
| Rules | Set by the vendor, not visible | Set with you, documented, editable |
| Numbers look wrong | No way to check | Trace the rule, then decide whether to keep it |
| Disagreement | Hidden, there is only one method | Surfaced on purpose |
| Ownership | Locked to the tool | Yours, models included |
You do not need a marketing data warehouse to start
That is the first thing we build. It is phase one of this project rather than a condition for it.
We run it as a retainer. We build the foundation, build the models, then own and run the pipelines. If you ever want to take it in-house, everything transfers to you.
Share of traffic reporting as direct
Direct-reported traffic from 51% to 8%
When most of a brand's traffic reports as direct, the channels actually creating demand look like the ones to cut. Rebuilding Zeffy's attribution brought direct down from 51% to 8%, and surfaced where the traffic was really coming from.
How we get from your sources to a model your team owns
Retainers start with a 12-month period. The foundation goes in during the first two to three months, because first we have to know what to build.
Marketing workshop
What marketing is trying to achieve, which budget decisions are waiting, and which teams work to which stage.
Foundation phase
Sources land in the warehouse and get stitched into one journey per person. This is also what shows you what is broken upstream.
Agree the rules
We work through the rules with you in plain language, one at a time, and write each one down with its reasoning.
Build the models, per stage
First models get built in dbt, one per stage, using the rules you agreed.
Add the other inputs
Survey responses, geo patterns and holdout results, compared against the click model.
Keep refining
Mixes change and goals change. Models get revised against real decisions rather than declared finished.
What you can have at the end of it
In most of our projects, we first build the foundation and afterwards we build the model.
One place where your marketing data lives
A marketing data warehouse of your own, hosted and run by us, with access for your team.
Every relevant source in it
Your CRM, ad platforms, web analytics, app data, survey answers and billing, landing in one place and staying up to date.
Attribution numbers your reporting can read
The modelled tables sit in the warehouse, so the dashboards and tools you already use can pull from them.
An interface for the rules
Built by us. Your marketers can read every rule in plain language, see what it changes, and ask for a different one.
A model for each stage of the funnel
So the team working on leads and the team working on closed revenue each get numbers built for their question.
Incrementality results built in as rules
When a holdout test shows a channel is worth more or less than the clicks suggest, that finding becomes a rule in the model rather than a slide nobody reopens.
A marketing analyst you can talk to
Ask questions of your marketing data in plain language, from Claude or ChatGPT, instead of waiting on a dashboard.
Our marketing analytics application
Built by us and set up around your business model and your marketing strategy, rather than a generic reporting layer.
Under the hood it is all built in dbt and version controlled, so anyone on your side can trace exactly how a number was produced. Nobody on your team inherits maintenance they did not ask for.
Who this is for, and what happens on a call
The first call is a diagnostic, not a pitch.
Is at least one channel already working?
If nothing has proved itself yet, that is an incrementality question, not an attribution one, and a test answers it faster. Attribution earns its money on the next question: several things work, so where does the budget go.
Is your mix genuinely hard to measure?
Single-channel Google with an in-session conversion is not, and we will say so. What makes a mix hard is what the money is buying: channels stacking, long sales cycles, an app mid-journey, revenue closing in the CRM, spend with no click.
One of two things happens after the call. If we do not think you need this, you get an email saying so. If we do, we book a presentation within 7 working days on what you need, why, and what it would cost.
FAQs
How is this different from GA4, or from an attribution tool?
Both ship a model and let you configure it, using rules you cannot inspect and inputs they can see. Neither knows what closed in your CRM, and neither can take a survey answer or a geo pattern. We build a model on your data, with rules you set and can read. The trade-off is honest: a tool is faster to switch on, and if your journey is simple enough for one, we will say so.
Does this replace MMM, or include it?
Neither exactly. MMM is one of the methods we can triangulate against, and it is worth running when you have enough channels and enough spend history to justify it. Plenty of teams get what they need without it. It is an option, not a prerequisite.
What can this not do?
It cannot tell you the true cause of a single sale. Nobody can. It cannot recover a journey you never recorded anything about, and it will not make two methods agree. What it does is give you numbers that add up, with the reasoning visible, so you can see how much of each answer is measured and how much is inferred.
How accurate is it?
Accurate is the wrong frame, because there is no true number to check against. Some parts are close to counted, like a click that led to a purchase in the same session. Others are estimates with real uncertainty, like the share of direct traffic your podcast created. We label which is which rather than presenting both at the same confidence.
Will the numbers match what the ad platforms report?
No, and nothing will. Every platform counts conversions it had a hand in, so the totals across platforms add up to more than you actually got. The model gives you one set of numbers that adds up, which means each platform will show you a larger figure than the model does. That gap is the point, not a bug.
What does it cost?
We give you a number in the presentation, within 7 working days of the call. It depends on how many sources have to be ingested, how many models your funnel needs, and which of the extras you want in scope: sending conversions back to the ad platforms, designing incrementality tests, measurement strategy for new initiatives. Quoting before we have seen your setup would be guessing.
Do we have to commit to a 12-month retainer?
Twelve months is the default because of how the work is shaped. The foundation goes in during the first two to three months, and most of the value comes after that, when the models get refined against real decisions. It is not the only way to work with us, so raise it on the call if you want a different structure.
What do you need from us?
Access to the systems, and the marketing questions. Practically that means permissions from your data team and from whoever owns each source, two workshops at the start, and someone available to agree the model rules with us. Most of the load is at the beginning. We do not need your engineers.
Can you work with the warehouse we already have?
Usually we build a separate marketing warehouse, because it keeps the marketing models clean and easy to hand back later. If you would rather we build inside the one you run, we look at that case by case and tell you honestly whether it is the better call.
We have no data engineer. Can we still do this?
Yes, and that is the usual case. We build and run the whole thing. You bring the marketing questions and access to your systems, we bring the engineering.
Can our team change the logic later?
Yes, and most teams do. Every rule is readable in plain language in the interface, so your marketers can disagree with one and ask for it to change, without going through a data team.
Can you help us work out how to measure a new initiative?
Yes, and it is often the more useful half of the work. Before a new channel, sponsorship or campaign type launches, there is a decision to make about how you will know whether it worked: a code, a landing page, a survey option, a holdout, or accepting that you will only see it at a regional level. We work that out with you and build it in, rather than being asked to attribute something retrospectively that left no trace.
Who owns the models?
You do. The data, the dbt models and the documented rules are all yours, and we use the final month as a handover if you want to take them in-house.