Why Custom Beats Off-the-Shelf (Under $1M ARR)
Off-the-shelf attribution tools — HockeyStack, Dreamdata, Bizible, Hyros — all cost $12k–$40k/year fully loaded. For a B2B SaaS under $1M ARR, that is 1–4% of your entire revenue, which is absurd for an analytics tool.
Worse: at that scale, your data volume is too small for "data-driven" attribution models to mean much. You do not have enough closed deals per month for a Markov chain or Shapley value model to produce statistically meaningful results. You have 5–30 closed deals per quarter. The algorithmic sophistication is wasted.
What you actually need at this stage:
- Clean UTM hygiene on every link you publish.
- A way to see which channel created each closed deal, weighted reasonably.
- A monthly view your whole team can read without Looker training.
That is a spreadsheet plus a few integrations — not a $2k/month SaaS.
The Free Stack
- GA4 — free, required anyway. Handles session stitching and anonymous traffic.
- Your CRM — HubSpot free, Pipedrive, Salesforce. Holds deal records, close dates, revenue.
- Google Sheets + a scheduled export — alternatively, BigQuery free tier if you want SQL.
- Looker Studio — free. Connects to GA4 and Sheets/BigQuery. Builds the monthly report.
Total monthly cost: $0. Time cost: 8–16 hours to set up, 1 hour/week to maintain.
Define Your Touchpoints
You need to decide which touchpoints count as "attribution moments" for your business. For most B2B SaaS, these four cover 90% of what matters:
- First Touch (FT): First time a person lands on your site. Captured via GA4 + landing page URL + UTMs.
- Lead Capture (LC): First form fill or identified session (demo request, content download, pricing page visit with email captured). Captured in your CRM.
- Sales-Accepted Lead (SAL): SDR qualifies them. Stage change in CRM.
- Closed Deal (CD): Won opportunity. Stage change + revenue amount in CRM.
Each deal has exactly one of each of these touchpoints — this is what makes the model tractable without specialized tools.
Choose Your Weighting
Now pick how to distribute credit across the four touchpoints. There is no one right answer — pick based on your funnel shape.
| Your funnel | Weighting (FT / LC / SAL / CD) | Why |
|---|---|---|
| Long research cycle, cold audiences matter most | 50% / 20% / 15% / 15% | First touch gets heavy credit. You rarely buy yourself into a deal at the last mile. |
| Sales-led, outbound matters more than inbound | 20% / 20% / 40% / 20% | SAL stage (SDR qualified) gets heavy credit because sales creates the deal. |
| PLG-assisted, short cycle | 40% / 40% / 10% / 10% | Product and demand gen carry the deal. Sales confirms, doesn t create. |
| Balanced / unsure (default) | 30% / 30% / 20% / 20% | Reasonable starting point if you do not have a strong prior. |
You can revisit this each quarter. The goal is not mathematical perfection — it is directional clarity for budget decisions.
Implementation (Step by Step)
Step 1: UTM discipline
Every link you publish — paid ads, LinkedIn posts, newsletter content, email sequences, Reddit comments — must have UTM parameters. Use GA4 URL builder or build a spreadsheet template. No UTM = no attribution.
utm_source: the platform (linkedin, google, meta, newsletter-name)utm_medium: the channel type (cpc, organic-social, email, referral)utm_campaign: your internal campaign name
Step 2: Capture First Touch in your CRM
When a visitor fills out a form, push the first-touch UTM values into custom fields on their contact record. HubSpot does this automatically if you use HubSpot forms. Otherwise, set a cookie on first visit and read it on form submit. Total dev time: 2–4 hours for a junior.
Step 3: Weekly CRM export
Once a week, export closed-won deals from your CRM with: deal amount, close date, first touch UTMs, lead capture date, SAL date. This is 20–50 rows for most B2B SaaS under $1M ARR. Dump into a Google Sheet.
Step 4: Apply weighting in Sheets
In the sheet, create columns for each of the 4 touchpoints. For each deal, split the revenue per your chosen weighting. A $20k deal with a 30/30/20/20 weighting gives $6k credit to First Touch channel, $6k to Lead Capture, etc.
Step 5: Build Looker Studio dashboard
Connect Looker Studio to your Google Sheet. Build two views:
- Channel attribution: Sum attributed revenue by channel (LinkedIn Ads, Google Ads, Organic SEO, Newsletter, etc.) over the last 90 days.
- Campaign attribution: Same but by
utm_campaign— which specific campaigns produced revenue.
Share the dashboard with sales, marketing, and leadership. Review monthly.
Monthly Reporting Template
Once a month, in 30 minutes, you should be able to answer:
- What was our attributed pipeline and revenue by channel, last 90 days?
- What is our CAC by channel, applying this attribution model?
- Which channel is most under-invested relative to its attributed revenue?
- Which channel is most over-invested?
- What are we changing in the next 30 days based on this?
That is the whole game. No $2k/month tool. No data team. No attribution-science PhD. Just UTM discipline + one spreadsheet + a Looker view + a monthly review.
When you outgrow this — usually around $2M ARR or when you hire a real marketing ops person — you graduate to HockeyStack or Dreamdata. But not before. The tools pay back at scale, not at scrappy.