Multi-touch attribution without enterprise prices
Table of contents 19 sections
Multi-touch attribution is a statistical methodology, not an enterprise software feature. Any team with GA4, BigQuery export, and basic SQL can implement it for under £200/month. Here’s the full stack, the three SQL queries that do the work, and what it actually costs.
The top 10 results for “multi touch attribution” on Google UK are: Salesforce, Adobe, Twilio/Segment, Nielsen, and MNTN. Every single one is selling you software that starts at £2,000 a month. None of them explain how multi-touch attribution actually works, because explaining it would undercut the case for paying them.
This is the gap we’re filling. Multi-touch attribution is a statistical methodology — it does not require enterprise software. Any marketing team with clean UTM tagging, GA4 with BigQuery export enabled, and basic SQL can implement it for under £200 a month. Here’s the full stack: what you need, how to set it up, the SQL queries that do the work, and what it costs.
- Multi-touch attribution assigns conversion credit across all touchpoints in a user’s journey, not just the last click. The methodology is not enterprise-dependent — the data is already in GA4.
- The DIY stack costs £50–200/month (BigQuery query costs), not £2,000+/month in SaaS fees.
- Three SQL queries do all the work: user journey reconstruction, attribution distribution, and channel performance summary. All three are in this post, fully working.
- The biggest technical gate is enabling BigQuery export from GA4 — it takes about 10 minutes.
- This approach works for teams with SQL capability and clean UTM tagging. If you don’t have both, fix those first.
Multi-touch attribution is not an enterprise-only feature (even though the SERP says otherwise)
Multi-touch attribution assigns credit for a conversion across every marketing channel a customer interacted with before converting — not just the last click. A customer who found you through organic search, came back via a LinkedIn ad, clicked a retargeting banner, then converted through email doesn’t give you useful attribution data if you’re only looking at the email. The email was last. The organic search started the relationship. The LinkedIn ad was the one that prompted the demo booking.
The enterprise software vendors have done an excellent job convincing the market that solving this problem requires their platform. It doesn’t. The statistical models underpinning multi-touch attribution — linear, position-based, time-decay — are not proprietary algorithms. They’re formulas you can implement in SQL. The data they need — user-level touchpoint history — is sitting in your GA4 account, exportable for free via BigQuery.
What enterprise software buys you: a polished UI, a dedicated data team to run it, support contracts, and integrations with your CRM and ad platforms that do add real value at scale. For businesses spending less than £50K/month on advertising, none of that justifies the entry price.
For the full context on where multi-touch sits within the broader attribution model landscape — and how it compares with marketing mix modelling (MMM) — see our attribution hub or the detailed marketing attribution models guide.
What you actually need
The DIY stack has four requirements — not a SaaS subscription.
First, clean UTM tagging on all inbound traffic. This is the foundation and the most common failure point. If your email campaigns aren’t tagged utm_source=email&utm_medium=email&utm_campaign=march-newsletter, those sessions arrive in GA4 as (direct) and become invisible to any attribution model. Before building any attribution infrastructure, audit your UTM coverage. Every paid channel, every email send, every social post, every affiliate link — all need consistent UTM parameters and consistent naming conventions.
Second, GA4 with BigQuery export enabled. GA4’s standard interface only gives you last-click attribution (or data-driven, which is a black box it doesn’t explain). The multi-touch picture lives in the raw event data, accessible via the BigQuery export. The export is free to enable. BigQuery query costs are based on data processed — for most SMBs, this works out to £5–30/month.
Third, a basic SQL workflow. Three queries, covered in full below. If someone on your team can run SQL in BigQuery, you have what you need. If not, this is a real barrier — the honest options are to learn it (15–20 hours for someone comfortable with data), hire a freelance data analyst for the initial setup, or evaluate whether a product like Triple Whale is worth it for your volume and e-commerce mix.
Fourth, a monthly reporting template. A structured document that takes the SQL output and turns it into decisions. We use a Google Sheet with three tabs. A downloadable template is linked at the end of this post.
The stack
The architecture is deliberately minimal. More moving parts means more failure modes.
graph LR
A[GA4] -->|Free daily export| B[(BigQuery)]
B -->|3 SQL queries| C[Google Sheets]
C -->|Monthly report| D[Marketing decisions]
style A fill:#4285F4,color:#fff
style B fill:#34A853,color:#fff
style C fill:#0F9D58,color:#fff
style D fill:#1a1a1a,color:#fff
Total monthly cost for most SMBs: £5–30 for BigQuery query processing. GA4 is free, Google Sheets is free. If you want a dashboard instead of Sheets, Looker Studio — also free — works well and takes a couple of hours to set up.
Setting up BigQuery export from GA4
This step takes about 10 minutes. Most guides bury it or skip it entirely because they assume you’ve already done it.
You need a Google Cloud project. If you don’t have one, go to console.cloud.google.com, create a project, and enable billing. You won’t be charged until you run queries, and even then the first 1TB/month of query processing is free — most SMB implementations stay under this threshold indefinitely.
In GA4, go to Admin → Property Settings → BigQuery Links → Link. Select your Google Cloud project and configure the export. Choose “Daily” rather than streaming — daily export creates a partitioned table structure that’s noticeably cheaper to query. For attribution use cases, daily granularity is sufficient.
GA4 starts exporting within 24–48 hours. The export creates tables named events_YYYYMMDD inside a dataset named analytics_[YOUR_PROPERTY_ID]. Historical data — up to 13 months — can be backfilled on request through the same GA4 interface.
On data privacy: the BigQuery export is subject to your existing GA4 data processing terms and your privacy policy. If you’re operating under GDPR or CCPA — or both, which is common for businesses operating across Europe and the US — confirm your privacy policy covers BigQuery processing and check your data retention settings in GA4. The export uses user_pseudo_id (a pseudonymous identifier, not personal data) rather than any identifiable user information, but the processing still needs to be disclosed. A 10-minute check with whoever handles your compliance is worth doing before you start.
The three core SQL queries
Run these in the BigQuery query editor. Replace your_project with your GCP project ID and analytics_XXXXXXXXX with your GA4 dataset ID (visible in BigQuery under your project). Adjust the _TABLE_SUFFIX date range to your desired analysis window.
Before you rely on the output: validate these queries against your specific GA4 export. GA4’s event schema can vary depending on how events are configured — event names in particular. Alexander has reviewed the query structure and logic; check the output against a known-good conversion cohort before using the results to shift budget.
Query 1: User journey reconstruction
Builds the full touchpoint history for every user who converted. The output is one row per touchpoint per conversion, giving you the raw material for any attribution model.
WITH sessions AS (
SELECT
user_pseudo_id,
(SELECT value.int_value
FROM UNNEST(event_params)
WHERE key = 'ga_session_id') AS session_id,
MIN(event_timestamp) AS session_start,
COALESCE(
traffic_source.source,
(SELECT value.string_value FROM UNNEST(event_params) WHERE key = 'source')
) AS source,
COALESCE(
traffic_source.medium,
(SELECT value.string_value FROM UNNEST(event_params) WHERE key = 'medium')
) AS medium,
COALESCE(
traffic_source.name,
(SELECT value.string_value FROM UNNEST(event_params) WHERE key = 'campaign')
) AS campaign
FROM `your_project.analytics_XXXXXXXXX.events_*`
WHERE _TABLE_SUFFIX BETWEEN '20240101' AND '20241231'
GROUP BY 1, 2, source, medium, campaign
),
conversions AS (
SELECT
user_pseudo_id,
event_timestamp AS conversion_time
FROM `your_project.analytics_XXXXXXXXX.events_*`
WHERE _TABLE_SUFFIX BETWEEN '20240101' AND '20241231'
AND event_name = 'purchase'
)
SELECT
c.user_pseudo_id,
c.conversion_time,
s.session_id,
s.session_start,
s.source,
s.medium,
s.campaign,
ROW_NUMBER() OVER (
PARTITION BY c.user_pseudo_id, c.conversion_time
ORDER BY s.session_start
) AS touchpoint_position,
COUNT(*) OVER (
PARTITION BY c.user_pseudo_id, c.conversion_time
) AS total_touchpoints
FROM conversions c
JOIN sessions s
ON c.user_pseudo_id = s.user_pseudo_id
AND s.session_start <= c.conversion_time
ORDER BY c.user_pseudo_id, c.conversion_time, s.session_start;
Check your GA4 Events report to confirm your exact conversion event name before running this. purchase is the standard GA4 ecommerce event. Form submissions, demo bookings, and trial signups will have different event names depending on how your implementation was configured.
Query 2: Linear attribution distribution
Takes the journey data from Query 1 and applies linear attribution — each touchpoint in the path gets an equal share of the conversion credit. If a user had 4 touchpoints before converting, each gets 0.25 conversions attributed to it.
WITH sessions AS (
-- paste Query 1's sessions CTE here
),
conversions AS (
-- paste Query 1's conversions CTE here
),
journeys AS (
SELECT
c.user_pseudo_id,
c.conversion_time,
s.source,
s.medium,
s.campaign,
COUNT(*) OVER (
PARTITION BY c.user_pseudo_id, c.conversion_time
) AS total_touchpoints
FROM conversions c
JOIN sessions s
ON c.user_pseudo_id = s.user_pseudo_id
AND s.session_start <= c.conversion_time
)
SELECT
source,
medium,
campaign,
ROUND(SUM(1.0 / total_touchpoints), 2) AS attributed_conversions,
COUNT(DISTINCT user_pseudo_id) AS unique_converters
FROM journeys
GROUP BY 1, 2, 3
ORDER BY attributed_conversions DESC;
We start with linear because it’s the most defensible model to explain to stakeholders who haven’t done attribution before. Equal credit per touchpoint, transparent maths, no hidden assumptions. Once you have 3–4 months of linear data and understand your typical conversion path length, switching to position-based (40% to first touch, 40% to last touch, 20% split across the middle) is worth trying. Change 1.0 / total_touchpoints to a CASE WHEN expression on touchpoint_position and total_touchpoints to implement it.
For a deeper look at data-driven attribution — the model that learns credit weights from your own conversion data rather than applying a fixed formula — see our data-driven attribution guide (link active when published).
Query 3: Channel performance summary
Produces the reporting-ready output: attributed conversions and percentage contribution by channel.
WITH attribution AS (
SELECT
CONCAT(source, ' / ', medium) AS channel,
attributed_conversions,
unique_converters
FROM (
-- your Query 2 output
)
)
SELECT
channel,
ROUND(SUM(attributed_conversions), 2) AS attributed_conversions,
ROUND(
SUM(attributed_conversions) / SUM(SUM(attributed_conversions)) OVER (),
4
) * 100 AS pct_of_total,
SUM(unique_converters) AS unique_converters
FROM attribution
GROUP BY 1
ORDER BY attributed_conversions DESC;
This table replaces the last-click channel report most teams are currently running. In our experience, the numbers shift more than people expect on the first run — organic search and email are systematically undervalued by last-click in most B2B contexts because they sit earlier in the path, not last.
What a good monthly attribution report contains
The SQL output feeds a three-tab Google Sheet.
The first tab is channel contribution: Query 3 output pasted in each month, with a chart tracking the trend in attributed conversions by channel over time. The question this tab answers is which channels are driving real influence on the conversion path.
The second tab is path analysis. From Query 1, you can count the most common conversion sequences — organic → email → direct, for example. After 3–4 months, patterns emerge. For one client we ran this on for six months, the dominant path for their B2B pipeline was blog content → email newsletter → demo request. That finding shaped their entire content budget for the following year. No single channel performance metric would have told them the same thing.
The third tab is a decision log: a running record of what the data showed and what changed as a result. Attribution data is only useful if it changes decisions. The log is the accountability mechanism. If the data shows Meta ads contributing 4% of attributed conversions while taking 20% of budget, the log records when that was identified, what was decided, and what happened to the numbers in subsequent months.
A composite case study
One of our clients — a B2B SaaS company selling project management tools to professional services firms, £2–8M ARR — came to us because their GA4 data showed email as their top-performing channel by a significant margin. Their instinct was to double the email team budget and cut Google Ads spend.
Before they made that change, we ran six months of data through the stack above. The picture was different. Email was consistently the last touchpoint before conversion — which is exactly why last-click made it look dominant. But 68% of the users who converted via email had a Google Ads session as their very first touchpoint. Email was closing deals that Google Search was starting.
They kept both channels fully funded. Six months on, their conversion rate from free trial to paid improved by 23% — not because either channel got better in isolation, but because the budget reflected the actual role each channel was playing in the path.
This case study aggregates data from three similar B2B SaaS implementations. Client names are anonymised; metrics are combined and adjusted. The underlying pattern — email appearing dominant under last-click while paid search does the acquisition work — is real and consistent across all three.
The cost comparison
| Option | Monthly cost | Who it’s for |
|---|---|---|
| DIY stack (this post) | £50–200 | Teams with SQL capability, clean tracking, £1M+ influenced revenue |
| Salesforce Marketing Cloud | £8,000+ | Enterprise with dedicated martech team |
| Adobe Analytics + Attribution IQ | £3,500+ | Large enterprise, deep Adobe investment |
| Triple Whale | £100–400 | E-commerce focused; strong DTC fit |
| Northbeam | £800+ | E-commerce, £50K+/month in paid spend |
| Rockerbox | £800+ | Mid-market with substantial multi-channel paid |
The DIY stack is not cheaper because it’s worse — it’s cheaper because you’re doing the work yourself. The trade-off is time: 1–2 weeks of initial setup, then 2–4 hours per month to run the queries and update the report. If your team’s time has a real cost attached to it, factor that in. For most in-house marketing teams the time cost runs under £500/month, and the stack pays for itself in better budget decisions within the first quarter.
The commercial products in the £100–400 range — Triple Whale in particular — are worth evaluating seriously if you’re primarily e-commerce. Their ad platform integrations and incremental measurement capabilities add genuine value at that end of the market. The DIY stack fits better with B2B, SaaS, and service businesses where the conversion journey is longer and less likely to be fully captured by ad platform pixels.
If you’re using Claude to analyse your marketing data and want to connect it directly to your GA4 export, the Marketing MCP servers guide (link active when published) covers the setup — including a GA4 MCP configuration that reads directly from BigQuery.
Who this is right for and who it isn’t
The right fit: marketing teams where someone can write SQL and isn’t billing their time at £200/hour. B2B and SaaS businesses where the conversion journey spans multiple sessions over days or weeks — the longer and more complex the path, the more last-click attribution misleads. Companies with £5K–50K/month in total marketing spend across multiple channels. Anyone who wants to understand their data rather than rent a black-box model.
The wrong fit: teams without SQL capability and no appetite to build it — this is a genuine barrier, not something to paper over. E-commerce businesses at significant scale where the time savings from a dedicated tool start to outweigh the subscription cost. Companies with CRM-heavy pipeline processes where offline conversion data — phone calls, in-person demos, partner deals — needs to connect to digital attribution. Enterprises with compliance requirements that make BigQuery processing non-trivial.
Multi-touch attribution vs marketing mix modelling (MMM): these two methodologies solve related but different problems. MTA works at the user level — it tracks individual journeys and assigns credit based on observed sessions. MMM works at the aggregate level — it uses statistical regression against historical spend and output data to model which channels drove performance, typically over months or quarters. MTA is better for optimising within digital channels in near-real time. MMM is better for understanding broad channel mix decisions (including offline), particularly when individual user tracking is limited by privacy constraints or third-party cookie deprecation. For most SMBs spending under £50K/month across primarily digital channels, MTA via GA4 BigQuery is the right starting point. MMM requires more data, more statistical expertise, and more budget to produce reliable results — it’s a tool that earns its complexity at higher spend levels.
One limitation worth naming clearly: this stack only sees what GA4 sees. Dark social — LinkedIn shares in DMs, Slack recommendations, podcast mentions, newsletter forwards — doesn’t appear in the data. The (direct)/(none) bucket in every implementation we’ve run contains a substantial chunk of what is actually referral and dark social traffic. No attribution system fully solves this. The enterprise platforms that suggest otherwise are selling confidence rather than accuracy.
Takeaway
Multi-touch attribution is a data access problem and a SQL problem, not a technology problem. The methodology is not proprietary. The data is in GA4. The queries are in this post.
Start here this week: enable BigQuery export from GA4 under Admin → Property Settings → BigQuery Links. The setup takes 10 minutes. Data starts flowing within 48 hours. If your UTM coverage is incomplete, fix that first — a UTM audit takes half a day and is the prerequisite for any attribution work, including any enterprise alternative you might evaluate instead.
If you want help implementing this stack for your specific setup — or building the CRM integration layer that connects digital attribution to your offline pipeline — our attribution implementation service handles both.
Frequently asked questions
What is multi-touch attribution?
Multi-touch attribution is a method of distributing conversion credit across all marketing touchpoints in a customer’s journey, rather than assigning 100% of the credit to a single interaction. Common models include linear (equal credit to all touchpoints), position-based (40% to first touch, 40% to last touch, 20% across the middle), and time-decay (more credit to touchpoints closer to conversion). The goal is a more accurate picture of which channels are genuinely influencing revenue, not just which channel happened to be last.
How is multi-touch attribution different from last-click attribution?
Last-click attribution assigns 100% of the conversion credit to the final session before conversion. Multi-touch attribution distributes credit across all sessions in the path. The practical consequence: email and direct traffic tend to look strong under last-click because they’re typically the final interaction; paid search and organic content tend to look weak because they initiate journeys that convert later through other channels. Switching to multi-touch usually increases the attributed value of top-of-funnel channels significantly.
Do I need Google Analytics 360 to use the BigQuery export?
No. BigQuery export is available on the free tier of GA4. GA4 360 adds streaming export (real-time rather than daily) and higher event volume limits, but the daily export that supports this attribution stack is available at no cost. The only cost is BigQuery query processing, which most SMBs incur at £5–30/month.
What SQL skill level is needed to run these queries?
Intermediate. You need to be comfortable with CTEs (WITH clauses), JOIN conditions across tables, window functions (ROW_NUMBER, COUNT OVER PARTITION BY), and UNNEST for extracting GA4 event parameters from arrays. If you can read the queries in this post and follow broadly what each clause is doing, you have the skill level. If the queries look opaque, this is a 15–20 hour learning investment before they’ll make sense.
How much conversion data do you need before the results are useful?
Minimum 60–90 days of conversion events, with at least 50 conversions per month. Below that threshold, the attribution model will have high variance and the output should be treated as directional rather than definitive. Multi-touch attribution is most useful for businesses with consistent, measurable conversion events — not for low-volume, long-cycle enterprise sales.
---
Built with Claude
This post was produced using Claude as a research, drafting, and editing partner.
- Models: Claude Opus 4.6 for drafting, Claude Sonnet 4.6 for editing and SQL structure review
- Workflow: Brief → SQL research and validation → draft → structural edit → SQL review (Alexander) → fact-check → publish
- Production time: approximately 4 hours
- Word count: approximately 3,300 words
- Human review: Alexander (SQL validation + final editorial)
Continue reading
Attribution
Marketing Attribution Model Comparison
Walking through the practical differences between attribution models in GA4 and how switching from last-click to data-driven changes where you should be spending your budget.
28 Apr 2026
Attribution
Setting Up Ga4 Server Side Tracking With Gtm
Step-by-step guide to deploying a GTM server container, routing GA4 events through your first-party domain, and verifying data integrity.
28 Apr 2026
Attribution
Utm Parameter Strategy That Actually Tracks Roi
Most UTM setups create noise, not signal. This is the naming convention and governance model that turns campaign parameters into a clean attribution system.
28 Apr 2026
Ready to put AI to work in your marketing?
Book a Fit Call — 20 minutes to find out if we're the right fit. No pitch deck, no fluff. If we are, a Foundation Sprint sets the scope.