TL;DR
You can build a working attribution system at a small startup using Google Analytics 4, Google Tag Manager, and a UTM naming convention locked inside a shared spreadsheet. The whole setup takes four to six hours spread across two days. The core tools are all free.
What You Need Before You Start
- A website you control (WordPress, Webflow, Squarespace, or a custom app with a
<head>tag you can edit) - A Google account for GA4 and Google Tag Manager (both free, no paid plan needed)
- Admin access to your site’s CMS or codebase
- A written list of your current active marketing channels (paid search, organic social, email, referral, etc.)
- Google Sheets (free) for your UTM link builder
- Looker Studio account at lookerstudio.google.com (free, formerly Data Studio) for dashboards
- Optional: Segment free tier (up to 1,000 monthly tracked users) if you want server-side event tracking later
- Optional: The Tag Assistant Chrome extension by Google for debugging
Step 1: Define Your Conversion Events First
Before you touch any tool, write down exactly what a conversion means for your startup. This sounds obvious, but skipping it is the single biggest reason attribution setups fall apart three months in.
Open a Google Doc and list your top three to five desired actions. For a SaaS startup this might be: free trial sign-up, demo booked, paid plan activated. For an e-commerce startup: add to cart, checkout started, purchase complete. For a content business: email subscriber, lead magnet download, consultation booked.
For each event, write down the page URL or button that triggers it, whether it has a dollar value you can assign, and whether it fires on your domain or a third-party tool like Calendly, Stripe, or Typeform.
Conversion Name | Trigger | Value | Domain
Free Trial Sign-Up | /thank-you-trial/ | $0 | yours
Demo Booked | Calendly confirmation | $50 | Calendly
Paid Activation | /dashboard/welcome/ | $99 | yours
You should now see a clear list of what you are actually optimizing for. Every next step maps back to this list.
Step 2: Lock Down a UTM Naming Convention
UTM parameters are the backbone of attribution at a startup. Without a written convention, you end up with “Facebook”, “facebook”, “FB”, and “fb” all showing up as separate sources in GA4. That data is garbage and you cannot recover it retroactively.
Create a shared Google Sheet called “UTM Master Convention” and define allowed values for every parameter right now.
Recommended convention:
– utm_source: lowercase, no spaces, platform name only (google, meta, linkedin, newsletter, podcast)
– utm_medium: lowercase, channel type (cpc, email, organic-social, referral, affiliate)
– utm_campaign: lowercase-hyphenated, format as [quarter]-[goal]-[audience], for example q2-trial-smb
– utm_content: specific creative or ad variant (image-a, video-b, text-link)
– utm_term: paid keyword or audience segment
Add this convention to your team Slack or Notion. Everyone who builds a link must use this sheet. That includes your agency, your freelancers, and your co-founder.
You should now see one clean convention document that anyone on the team can reference before creating a URL.
Step 3: Install Google Tag Manager on Your Site
Google Tag Manager (GTM) is the container that holds all your tracking scripts. Installing it once means you can add GA4, ad pixels, and other tags later without touching your codebase again.
Go to tagmanager.google.com, create a new account and container for your website. GTM gives you two code snippets. The first goes inside the <head> tag as high as possible. The second goes immediately after the opening <body> tag.
For WordPress, install the free “GTM4WP” plugin and paste your container ID (format: GTM-XXXXXXX). For Webflow, paste the snippets in Project Settings > Custom Code. For a React app, use the react-gtm-module package:
npm install react-gtm-module
// in your index.js or App.js
import TagManager from 'react-gtm-module'
TagManager.initialize({ gtmId: 'GTM-XXXXXXX' })
You should now see a green “Connected” status when you open GTM’s Preview Mode. The Tag Assistant Chrome extension confirms the container fires on page load.
Step 4: Connect GA4 Through GTM
Google Analytics 4 is your attribution data store. Deploy it through GTM so everything stays in one place and you never need to touch raw site code for tracking changes again.
In GTM, go to Tags > New. Choose “Google Analytics: GA4 Configuration” as the tag type. Enter your Measurement ID (format: G-XXXXXXXXXX, found in GA4 > Admin > Data Streams > your stream). Set the trigger to “All Pages”. Save and publish the container.
In GA4, go to Admin > DebugView. Open your site in a new browser tab. You should see events appearing in real time within 30 seconds.
Enable “Enhanced Measurement” under GA4 > Admin > Data Streams > your stream > Enhanced Measurement toggle. This auto-tracks page views, scrolls, outbound clicks, site search, and file downloads with zero extra code.
You should now see live data in GA4’s Realtime report. If you see a page_view event, the base setup is working.
Step 5: Build a UTM Link Builder in Google Sheets
Manual UTM tagging is error-prone. A formula-based link builder enforces your naming convention from Step 2 and generates clean URLs in under ten seconds.
Create a sheet with these columns: Base URL, utm_source, utm_medium, utm_campaign, utm_content, utm_term, Generated URL.
In the Generated URL column, use this formula:
=IF(A2="","",A2&"?utm_source="&B2&"&utm_medium="&C2&"&utm_campaign="&D2
&IF(E2<>"","&utm_content="&E2,"")&IF(F2<>"","&utm_term="&F2,""))
Add a second sheet called “Allowed Values” with dropdown lists for utm_source and utm_medium using Google Sheets data validation. This blocks typos before they reach GA4.
You should now see a clean, consistently formatted tagged URL in the Generated URL column every time you fill in the fields.
Step 6: Tag All Your Active Campaigns Right Now
Go through every active campaign and replace untagged URLs with UTM-tagged ones. This is the unsexy part that most people skip, and it is where attribution actually starts working.
Check these places first: Google Ads final URLs, Meta Ads destination URLs, LinkedIn Campaign Manager destination URLs, email campaign links in your ESP, bio links on Instagram and TikTok, podcast show notes, and any influencer or affiliate links.
For Google Ads, combine ValueTrack parameters with your UTM tags:
https://yoursite.com/landing?utm_source=google&utm_medium=cpc
&utm_campaign=q2-trial-smb&utm_content={creative}&utm_term={keyword}
The {keyword} and {creative} ValueTrack parameters auto-populate with the actual search term and ad creative ID that triggered the click.
You should now see utm_source and utm_medium appearing in GA4 > Reports > Acquisition > Traffic Acquisition within 24 hours of tagging your live campaigns.
Step 7: Set Up Conversion Events in GA4
Return to your list from Step 1. For each conversion that fires on your own domain, you need to create a GTM trigger and mark it as a Key Event in GA4.
For a thank-you page trigger like /thank-you-trial/, go to GTM and create a new tag: GA4 Event, same Measurement ID, Event Name: trial_signup. Set the trigger to “Page View” with a condition where Page URL contains /thank-you-trial/. Publish the container.
In GA4, go to Admin > Key Events > Create. Add trial_signup. GA4 now tracks this event and attributes each conversion to the source that brought the user to your site.
For third-party tools like Calendly, use their “redirect after booking” setting to send users back to a page on your domain. That page fires your GA4 event and retains the original UTM session. For Stripe, use a post-payment redirect to your own order confirmation page the same way. If you need server-side tracking, Segment connects to GA4 as a destination and handles cross-platform events cleanly.
You should now see your key events in GA4 > Reports > Acquisition > Traffic Acquisition, broken down by source and medium.
Step 8: Build an Attribution Dashboard in Looker Studio
Looker Studio turns raw GA4 numbers into a shareable, auto-refreshing view. Go to lookerstudio.google.com and create a new report. Add GA4 as your data source and select your property.
Build a table with these fields:
Dimension 1: Session source / medium
Dimension 2: Session campaign
Metric 1: Sessions
Metric 2: trial_signup (key event count)
Metric 3: trial_signup rate
Sort by: trial_signup DESC
Add a date range control to toggle between last 7 days, last 30 days, and custom ranges. Add a second table using First User Source vs Session Source to compare first-touch against last-touch attribution side by side. Share the report link with your team. It auto-updates every time someone opens it.
You should now see a live dashboard showing which channels drive the most conversions, sorted by performance, with no manual data pulls required.
Step 9: Build a Weekly Attribution Review Ritual
Data without review is just storage. Block 30 minutes every Monday to answer one question: which channel drove the most key events last week, and what changed?
Set the date range in Looker Studio to “Last 7 days” and enable the comparison period feature to show the previous 7 days side by side. Look for channels where sessions went up but key event rate dropped. That mismatch usually points to a landing page or offer problem, not a traffic problem.
Copy the weekly top-line numbers into a running Google Sheet. Over time, this becomes a historical record that no GA4 property reset can erase.
Weekly Review Checklist:
[ ] Top source by key events this week?
[ ] Any source with >10% drop in key event rate vs last week?
[ ] Any new source appearing for the first time (check UTM tags)?
[ ] Budget shifts that explain traffic spikes or drops?
[ ] Direct/none traffic spike suggesting untagged campaigns?
You should now have a repeatable 30-minute process that turns attribution data into channel decisions.
Common Mistakes To Avoid
- Inconsistent UTM casing: “Facebook” and “facebook” show up as two separate sources in GA4. Enforce all-lowercase across your entire team from day one, no exceptions.
- Tagging internal links: Never add UTM parameters to links between pages on your own site. Doing this resets the session source and wipes the original attribution for that visit.
- Ignoring direct/none spikes: A sudden increase in
(direct) / (none)traffic usually means untagged external links, not genuine direct visits. Audit every active campaign whenever you see this. - Not testing before publishing: Always use GTM Preview Mode and GA4 DebugView before publishing a container. A broken trigger means you lose real conversion data, and you cannot get it back.
- Setting up tracking after the campaign ends: UTM tags only work if they are on the link when someone clicks it. You cannot retroactively attribute traffic that ran with bare URLs.
- Over-engineering the first version: GA4 plus GTM plus a spreadsheet is enough to make real budget decisions at under $1M ARR. Adding a paid multi-touch attribution platform before your data is clean just amplifies the mess.
When To Level Up
The free GA4 and GTM setup works well until you hit a few specific walls.
The first wall is cross-device attribution. GA4’s cookie-based model breaks when users switch from mobile to desktop or clear their cookies. At around 5,000 monthly conversions, the noise from unattributed journeys starts distorting your channel mix enough to mislead budget decisions.
The second wall is channel count. Once you run more than six or seven paid channels simultaneously, last-click attribution consistently under-credits top-of-funnel channels like YouTube, podcasts, or display. GA4’s data-driven attribution model can help, but it requires at least 300 conversions per month per event to activate.
The third wall is revenue weighting. If your average deal size varies widely, conversion counts alone mislead you. A channel that drives 50 free-trial signups at $20 ACV is very different from one that drives 10 signups at $500 ACV. Solving that requires connecting your CRM to your attribution layer.
When you hit any of these walls, it is time to look at dedicated multi-touch attribution tools. You can find a full comparison of paid and free options at /category/growth/. For a deeper look at GA4 setup before you scale, the guide on GA4 event tracking for startups covers advanced configuration. And if UTM management at scale is the problem, the UTM parameter best practices post covers tooling that goes beyond a spreadsheet.
Frequently Asked Questions
Do I need to pay for any of these tools?
GA4, GTM, and Looker Studio are all completely free with no usage caps for standard reporting. Segment’s free tier covers up to 1,000 monthly tracked users, which is enough for most pre-seed and seed-stage startups. You only need to spend money when you add a dedicated multi-touch attribution platform later.
What is the difference between first-touch and last-touch attribution?
First-touch credits the channel where the user first found you. Last-touch credits the channel they came from right before converting. GA4 defaults to last-click for most acquisition reports but also shows data-driven attribution in the Advertising section once you have enough monthly conversion volume (300 or more per event).
How do I track conversions that happen inside third-party tools like Calendly or Typeform?
Set up a redirect after the form or booking is complete that sends users to a confirmation page on your own domain. That page fires your GA4 key event and retains the original UTM attribution from the session that started the journey.
Can I use this setup with Shopify?
Yes. Install the GTM container in Shopify using the theme.liquid file or a Shopify app like “GTM4WP by littledata”. Then follow the same steps for GA4 and key events. Use the Shopify order status page URL as the trigger for your purchase conversion event.
How long before I can see meaningful attribution data?
You need at least two to four weeks of consistently tagged traffic before drawing conclusions. Less than that and you are looking at statistical noise. Set a calendar reminder to review the data 30 days after finishing this setup.
Bottom Line
Attribution tracking at a startup does not require a six-figure data stack or a dedicated analytics engineer. You define your conversion events first, lock in a UTM naming convention before anyone creates a single link, install GTM once, connect GA4 through it, build a link builder spreadsheet that enforces the convention, tag every active campaign, configure key events for each conversion, and build one dashboard in Looker Studio. The 30-minute weekly review is what turns raw numbers into actual channel decisions. Start simple, stay consistent, and fix the naming convention before adding any new paid channel. Once you are running more than six paid channels or hitting 5,000 monthly conversions, explore the more advanced attribution options waiting for you at /category/growth/.