A 2026 marketing attribution playbook for bootstrapped B2B and B2C SaaS founders. Stage-by-MRR attribution priorities, the trial-to-paid problem, channel benchmarks, and the honest tool stack at $29/mo instead of $800/mo.
A founder I know runs a $32k MRR project management SaaS. She paid Dreamdata $9,000 for an annual contract in January 2026 because her board pushed for "real attribution." Six months in, the tool was sitting unused because the data volume was too thin for the multi-touch models to converge, the team had no analyst to maintain the integration, and the actionable decisions it produced were the same decisions she could have read off a last-touch spreadsheet at zero cost. The product was not bad. It was a $9,000 wrong tool for a $32k MRR right problem.
This article is the playbook I wish she had read before signing that contract. It is not anti-Dreamdata, anti-Factors.ai, or anti-HockeyStack; those are excellent products at the scale they are built for. It is pro-honest-staging, where the attribution sophistication you adopt should match the MRR stage and channel-mix complexity you are operating at. Most "SaaS marketing attribution" content on the public web is written for enterprise and reads as gospel for bootstrapped founders, which is how a 30-person SaaS ends up paying enterprise prices for enterprise infrastructure to solve a problem that does not yet exist.
I have run attribution on attrifast.com from $0 MRR to where it is today, and stitched the same architecture into roughly forty channels across a handful of client SaaS properties between $4k MRR and $1.8M MRR. The patterns below are what worked. The companion pieces walk specific surfaces: the ChatGPT referral analytics guide for AI-engine attribution, the AEO vs SEO 2026 strategy piece for content effort split, and the product pages for Attrifast itself at /for/bootstrapped-saas, /for/stripe, and /features/revenue-attribution.
Quick Facts
Metric
Value
Source
Median B2B SaaS trial-to-paid conversion rate
14-25%
OpenView SaaS Benchmarks 2024 [1]
Median B2B SaaS sales cycle (self-serve)
7-14 days
ChartMogul SaaS Metrics report [3]
Median B2B SaaS sales cycle (AE-assisted)
30-90 days
Bessemer State of the Cloud 2025 [2]
Median touchpoints to B2B SaaS purchase
7-12 touches
Forrester B2B Buyer Survey 2024 [13]
Dreamdata entry pricing (2026)
$750+/mo
Dreamdata pricing page [4]
Factors.ai entry pricing (2026)
$799+/mo
Factors.ai pricing [5]
HockeyStack entry pricing (2026)
$1,200+/mo
HockeyStack public pricing
GA4 vs Stripe revenue gap (median)
18-35% understated by GA4
Attrifast aggregate, n=38
Cookieless attribution coverage (Attrifast)
92-96% of paid signups
Attrifast internal, Q1 2026
Ad blocker session loss (B2B SaaS)
15-30% of sessions
Stripe Atlas analytics post [10]
Median bootstrapped SaaS MRR (Indie Hackers)
$4,800
Indie Hackers community data [11]
Share of SaaS startups under $10k MRR
Roughly 75% of public profiles
Indie Hackers / ProfitWell [11][7]
B2B SaaS organic search share of trial signups
28-42%
OpenView benchmarks [1]
Median Stripe webhook event types per SaaS
12-18 active
Stripe documentation [9]
SaaS LTV/CAC target threshold
3.0x or higher
SaaStr / Tomasz Tunguz [6][8]
Free trial standard length (B2B SaaS)
14 days (50%+ of SaaS)
OpenView SaaS Benchmarks [1]
Two numbers do most of the analytical work in this article. The first is the 7-12 touches it takes to convert a typical B2B SaaS buyer per Forrester [13], which explains why pure last-touch breaks above a certain scale. The second is the 75% of public Indie Hackers SaaS profiles under $10k MRR [11], which explains why most attribution content overshoots the actual operator audience by 10x in budget and complexity.
Why SaaS attribution differs from e-commerce attribution
The default attribution playbooks on the public web are written either for e-commerce (Shopify-shaped, short sales cycles, one-session conversion) or for enterprise B2B (long sales cycles, multi-stakeholder buying, six-figure ACVs). SaaS sits between them, and the misfit shows up in five places where applying the wrong template produces systematically wrong decisions.
1. The conversion event is decoupled from the marketing touch. An e-commerce purchase happens in the same session as the marketing click 60-75% of the time across the DTC sites I have measured. A SaaS trial signup is just step one of three (signup, activation, paid conversion), and the paid conversion typically happens 14-30 days after the signup session ended. The attribution model has to span that window or it credits the wrong channel.
2. Free trials decouple intent from revenue. A user who signs up for a free trial has not yet decided to pay you. Treating trial signups as conversions inflates your attribution numbers; treating only paid conversions as conversions undercounts your funnel-top channels. SaaS attribution has to model both events and link them.
3. Buying committees confuse the click-identity to buy-identity mapping. In B2B SaaS especially, 3-7 people may research the tool, one signs up for the trial, a different person signs the contract, and a fourth person actually uses it day to day. The "who clicked the ad" identity is often not the "who decided to buy" identity. Forrester's 2024 B2B Buyer Survey [13] puts the typical committee size at 6-10 people for software purchases over $5k ACV.
4. The session-to-revenue join requires Stripe metadata propagation. Stripe Checkout's metadata field [9] is the right primitive to carry session ID and source through to the webhook, but most SaaS teams do not wire it correctly the first time. The most common mistake: the metadata is set on the Checkout Session but not propagated to the Subscription or Customer, so the webhook fires without the attribution data attached.
5. The retention dimension matters. An e-commerce purchase is one revenue event. A SaaS subscription is a recurring stream where the lifetime value depends on retention. Attribution that does not weight by LTV systematically over-credits channels that drive high-churn customers and under-credits channels that drive sticky ones.
The structural comparison:
Attribution dimension
E-commerce
B2C SaaS
B2B SaaS (self-serve)
B2B SaaS (AE-assisted)
Sales cycle
Minutes to hours
1-7 days
7-30 days
30-180 days
Conversion event
Order placed
Paid subscription
Trial start, then paid
Demo booked, then closed-won
Trial in funnel
No
Sometimes (freemium)
Yes (14-30 days typical)
Yes, plus sales motion
Touchpoints to convert
1-3
2-5
5-9
7-15
Buying committee size
1
1
1-3
3-10
Identity stitching needs
Light
Medium
High
Very high
Revenue model
One-time
Recurring
Recurring
Recurring + expansion
LTV weighting matters
No
Yes
Yes
Yes
Best attribution model (default)
Last-touch
Last-non-direct
First-touch on trial + last-touch on paid
First-touch + multi-touch position
Dominant integration
Shopify webhook
Stripe webhook
Stripe + product analytics
Stripe + CRM (HubSpot/Salesforce)
The B2B SaaS columns are where most public attribution content fails. The default e-commerce model (last-touch on the purchase session) under-credits the funnel-top channels that drove the trial. The default enterprise model (multi-touch with marketing-mix modeling) overshoots the data volume a sub-$500k-MRR SaaS can support. The right answer for the middle is a stage-aware stack, which is what the next section walks through.
The four SaaS attribution stages, by MRR
Attribution sophistication should track MRR stage and channel-mix complexity. Below is the staging I use for both my own properties and the SaaS founders I advise. The boundaries are approximate (your mileage will vary by vertical, sales motion, and pricing) but the rough shape holds.
MRR stage
Attribution model
Tool stack
Time investment
Annual cost
$0-5k MRR
Ask every customer
Spreadsheet
5 min/week
$0
$5-50k MRR
Last-touch + RPV by channel
Stripe-native tool ($29/mo)
30 min setup, 1 hr/month review
$348/year
$50-500k MRR
Position-based multi-touch
First-party attribution + CRM
1-2 weeks setup, 4 hrs/month review
$5k-15k/year
$500k+ MRR
Data-driven, MMM, custom warehouse
Snowflake + dbt + reverse-ETL + MTA tool
3-6 months setup, dedicated analyst
$50k-200k+/year
The progression follows the same logic as company-stage hiring: the right tool at each stage is the one that produces enough decision value to justify its cost without absorbing operator time that would produce more value elsewhere.
Stage 1: $0-5k MRR — do not buy attribution software
The honest answer most attribution vendors will not give you: below $5k MRR, your sample size is too small for any attribution model to produce statistically meaningful per-channel numbers. With 30 paying customers, splitting them by channel into 6-8 buckets leaves you with 3-5 customers per channel, which is not enough signal to base channel-budget decisions on.
What works at this stage:
Activity
Time
Value
Email every paying customer with one question: "How did you first hear about us?"
10 min/week
High
Maintain a spreadsheet with customer name, signup date, source from email reply, Stripe MRR
5 min/week
High
Tag every URL you publish with a consistent UTM scheme
One-time, 30 min
Medium
Run Plausible or Fathom for $9-15/mo to see basic traffic by source
$108-180/year
Low at this stage
Sign up for Dreamdata, Factors.ai, or HockeyStack
n/a
Negative ROI
The "email every customer" loop is the highest-leverage activity at this stage and stops working around 50-100 paid customers when reply rates drop and the time cost balloons. Use it while it lasts. The qualitative signal you get from those replies ("I saw your post on Indie Hackers" or "my colleague forwarded the demo video") is far more decision-useful than a per-channel attribution percentage on 30 conversions.
The Tomasz Tunguz blog has consistently argued for prioritizing customer conversations over attribution dashboards at this stage [6], and Lenny's Newsletter's early-stage growth content has made the same point in passing [12]. The bias to instrument early is almost always wrong.
Stage 2: $5-50k MRR — last-touch attribution by source plus RPV
This is the stage where a Stripe-native attribution tool starts to pay for itself. You have enough paid customers (typically 50-500) for per-channel numbers to be directionally meaningful, the operator hours saved by not maintaining a spreadsheet outweigh the tool cost, and the channel-mix decisions you make at this stage compound over the next two years of growth.
The right tool at this stage measures three things well:
Metric
Why it matters
How to read it
Last-touch source per paying customer
Tells you which channel closed the loop
Use for weekly channel-budget tweaks
Revenue per visitor (RPV) by channel
Updates in near-real-time, no cohort window
Use for spotting channels that suddenly outperform
Trial-to-paid conversion rate by source
Catches channels that drive trials but not revenue
Use for filtering out vanity-traffic channels
Notice what the right tool does not measure at this stage:
Metric
Why it does not yet matter
Multi-touch path analysis
Variance too high at <500 conversions/month
Marketing mix modeling
Requires years of seasonality data
Cross-device identity stitching
Adds operational complexity for marginal lift
Account-based attribution
Only relevant if you have an AE-assisted motion
Influence and exposure modeling
Enterprise B2B problem
The honest stage-2 stack is one cookieless tracking script that fires on every page, one Stripe webhook handler that joins paid events to sessions via the Checkout metadata field, and one dashboard view showing revenue, RPV, and trial-to-paid by channel. That is the entire stack. Attrifast ships this at $29/mo; rolling it yourself takes a weekend if you know Next.js middleware and Stripe.
The ProfitWell research on SMB SaaS attribution from 2023-2024 [7] consistently found that adding a fourth or fifth attribution metric beyond last-touch and RPV at this stage produced negative operator ROI; the time spent maintaining the additional reports exceeded the decision value they generated.
This is the stage where pure last-touch starts producing systematically wrong channel-budget signals because your buyers are running multi-touch journeys averaging 7-12 touches across 30-90 days. Giving 100% of the credit to the final touch under-credits the top-of-funnel channels.
The right model at this stage is position-based (also called U-shaped or W-shaped), which assigns weighted credit across multiple touches:
Model
Credit assignment
Best for
Linear
Equal credit to every touch
Long sales cycles with many equal-weight touches
Time-decay
Recent touches weighted more
Short sales cycles with recency bias
Position-based (U-shaped)
40% first, 40% last, 20% middle
Balanced funnel with clear top-of-funnel value
Position-based (W-shaped)
30% first, 30% middle conversion, 30% last, 10% other
Includes a mid-funnel conversion event (trial start)
Data-driven (algorithmic)
Model-derived weights from conversion paths
High volume (>1k conversions/month)
For a $50-500k MRR B2B SaaS with a trial funnel, the W-shaped model is usually the right default because it weights the three meaningful events (first touch, trial signup, paid conversion) without overweighting the long tail of middle touches.
The tool stack expands at this stage:
Component
Purpose
Vendor options
First-party attribution tool
Captures sessions and joins to Stripe
Attrifast, Plausible+custom, DIY
CRM
Holds lead and account records
HubSpot, Pipedrive, Attio
Product analytics
Tracks in-product activation events
Mixpanel, PostHog, June
Email/marketing automation
Sequences and lead nurture
Customer.io, Loops, Resend
Reverse ETL
Syncs warehouse data back to tools
Hightouch, Census (if you need it)
The "if you need it" qualifier on reverse ETL matters. Most $50-500k MRR SaaS teams do not need a warehouse-based stack yet. The decision tilts toward warehouse infrastructure when you have more than one revenue stream (e.g., self-serve plus AE-assisted plus expansion), more than two product analytics tools producing conflicting numbers, or a board-level reporting cadence that requires data lineage.
At this scale the cost-to-value math for enterprise attribution tools starts to make sense. You have the data volume (>1k conversions per month) for data-driven attribution models to converge. You have the team (typically a dedicated analytics engineer or growth analyst) to maintain the integration. You have the budget complexity (multiple six-figure channel spend lines) where a 5% misallocation costs more than the tool.
The Bessemer Cloud Index data on top-quartile SaaS growth [2] consistently shows that companies at this scale invest in attribution infrastructure proportionally with marketing spend; the rule of thumb is 3-5% of marketing budget allocated to measurement infrastructure.
The shared characteristic: these tools assume a warehouse-shaped data infrastructure, a dedicated person who owns the integration, and a multi-month implementation timeline. They produce real value at the scale they are built for. They produce negative ROI at smaller scale.
The trial-to-paid attribution problem
The structural reason most SaaS attribution numbers are wrong is the gap between the trial signup event and the paid conversion event. The marketing touch that drove the user to sign up for a trial happened anywhere from minutes to weeks before the trial-to-paid conversion. Most attribution tools attribute revenue to whatever the user did the day they upgraded (usually a direct visit to /billing or a click on an in-app upgrade prompt), which credits "direct" or "in-app" for what was actually paid search three weeks earlier.
The mechanics of the problem:
The right model is first-touch-on-trial-signup as the default, with a last-non-direct overlay for diagnostic purposes. The implementation requires persisting the trial-signup source on the user record at trial start, then on the Stripe subscription.created event, joining back to that original source rather than the most recent session.
The implementation specifically:
Step
Implementation
Common mistake
1. Capture source on first session
First-party session row with UTM + referer
Relying on Google Analytics cookie that gets cleared
2. Persist source on signup form
Hidden form field with session ID
Form submits without source field
3. Pass source into Stripe metadata
Set on Customer or Subscription metadata
Setting on Checkout Session only (does not propagate)
4. Read source on subscription.created
Webhook handler reads metadata
Reading from wrong webhook event
5. Attribute revenue to original source
Dashboard joins original source to MRR
Joining to most-recent session instead
The Stripe documentation [9] is clear that metadata can be set on Customer, Subscription, Invoice, and Checkout Session objects, but the metadata does not automatically propagate between them. You have to set it explicitly on each object you care about. The most common SaaS attribution bug is setting metadata only on the Checkout Session and then being surprised when the subscription.created webhook fires without it.
The right webhook events to listen to for paid conversion in a trial-funnel SaaS:
Stripe event
What it represents
Use for attribution?
checkout.session.completed
Checkout flow finished
Yes for direct paid signups, no for trial-to-paid
customer.subscription.created
New subscription record created
Yes, including trial-start events
customer.subscription.updated
Subscription state changed (e.g., trial-to-paid)
Yes for trial-to-paid conversion
invoice.payment_succeeded
First real payment received
Yes for confirming paid status
customer.subscription.trial_will_end
3 days before trial expires
Use for re-engagement, not attribution
The cleanest implementation listens to customer.subscription.updated filtering for the status transition trialing → active, joins to the source captured at signup, and writes the MRR amount to the channel's attributed revenue total.
The conversion-rate dimension by source matters because it controls the channel-budget math:
Source
Trial signup rate (visitor → trial)
Trial-to-paid rate
Effective paid conversion rate
Direct (incl. brand recall)
4.2%
26%
1.09%
Organic search
2.8%
22%
0.62%
Paid search
3.1%
18%
0.56%
Organic social
1.4%
14%
0.20%
Paid social
0.9%
11%
0.10%
Email (nurture)
8.4%
31%
2.60%
Referral / partner
6.1%
28%
1.71%
Podcast mention
1.9%
19%
0.36%
Content / SEO long-tail
2.2%
24%
0.53%
AI engine citation
3.6%
21%
0.76%
Two reads. First, the channels that look bad on signup rate (paid social, podcast) and look good on signup rate (email, referral) often do not translate to paid conversion at the same ratio; the trial-to-paid filter compresses the gap. Second, email and referral are systematically the highest-converting channels in raw numbers because they are end-of-funnel by definition; treating them as comparable to top-of-funnel channels is a category error.
Free trial vs paid signup attribution mapping
Three signup paths are common in SaaS, and each requires a different attribution mapping. The choice of path is a product decision, not an attribution decision, but it changes the attribution architecture in ways most operators do not anticipate.
The free trial with card required is the dominant pattern for SMB SaaS in 2026 because it filters lower-commitment signups, which both improves trial-to-paid conversion and reduces support load. It is also the easiest to attribute reliably because the card-required friction filters out drive-by signups that would muddy the data.
The attribution mapping for each path:
Path
First-touch capture
Trial-start capture
Paid conversion capture
Free trial (card)
First session with UTM
Stripe Customer + Subscription metadata at trial create
Subscription update from trialing to active
Free trial (no card)
First session with UTM
App-side user record at signup
Stripe Checkout when upgrade happens
Freemium
First session with UTM
App-side user record at signup
Stripe Checkout whenever it happens
Direct paid
First session with UTM
n/a
Stripe Checkout Session metadata
Demo + AE
First session with UTM
Lead created in CRM with UTM
Opportunity closed-won in CRM with UTM propagated
The freemium attribution problem is the hardest because the time window between initial signup and paid conversion is unbounded. A user who signs up in January and upgrades in October requires attribution data that persists for 10+ months. The pragmatic approach: cap the attribution window at 180 days, write the original source to the user record permanently, and accept that conversions beyond 180 days will be attributed to "out-of-window" rather than to a specific channel.
The Stripe Atlas SaaS data on funnel benchmarks [10] consistently shows that the free-trial-with-card model produces the cleanest attribution data, the highest trial-to-paid rates (typically 22-28% vs 14-22% for no-card), and the lowest support burden. The pricing-page conversion advantage of "no card required" is usually offset by the dirty attribution data and lower conversion downstream.
B2B vs B2C SaaS — what changes
The default attribution playbooks assume one homogeneous SaaS audience, but B2B and B2C SaaS attribution diverge in ways that matter for tool choice, model selection, and metric prioritization.
Dimension
B2B SaaS
B2C SaaS
Sales cycle (median)
30-90 days
1-7 days
Touchpoints to convert
7-12
2-5
Buying committee size
3-7
1
Trial length
14-30 days
7-14 days
Trial-to-paid rate
14-25%
4-12%
Dominant acquisition channel
Organic search + content
Paid social + influencer
ACV (median)
$300-3,000/year
$60-300/year
Churn rate (monthly)
1-3%
4-8%
LTV/CAC target
3-5x
2-4x
Attribution complexity
High
Medium
Identity stitching needed
Yes
Less critical
CRM integration needed
Often
Rarely
Best default model
First-touch + last-touch
Last-non-direct
The five concrete consequences for attribution architecture:
1. B2B requires longer attribution windows. A 30-day attribution window catches most B2C SaaS journeys but misses 40-60% of B2B SaaS journeys per the OpenView benchmark data [1]. Default to 60-90 days for B2B and 14-30 days for B2C.
2. B2B benefits from identity stitching across devices. A B2B buyer reads your blog on mobile during their commute, opens the pricing page on desktop at work, then signs up after a Friday afternoon Slack mention. Without identity stitching the three sessions look like three different users. Saastr's research on enterprise buying patterns [8] underlines how multi-device journeys are the norm above $5k ACV.
3. B2C tolerates simpler attribution well. A B2C consumer SaaS at $9-29/mo can run pure last-non-direct attribution and capture 85-90% of the decision value. The marginal lift from multi-touch at this scale is rarely worth the operator time.
4. B2B AE-assisted requires CRM integration. If any meaningful share of your revenue comes from AE-touched deals, the attribution data has to flow from first-touch session through to opportunity and closed-won in the CRM. This is non-trivial; HubSpot, Pipedrive, Attio, and Salesforce each handle UTM propagation differently and none of them get it right by default.
5. B2C SaaS attribution is more vulnerable to ad-blocker drop-off. Consumer audiences run ad blockers at 30-45% rates versus B2B audiences at 15-25%. The Stripe Atlas analytics data [10] consistently shows this skew. First-party server-side attribution is more important for B2C SaaS even though the playbook is technically simpler.
The B2B vs B2C tool fit:
Tool
B2B fit
B2C fit
Why
Attrifast
High
High
Stripe-native, cookieless, both motions
Dreamdata
Very high
Low
Built for B2B account-level
Factors.ai
Very high
Low
Account intent + B2B-shaped
HockeyStack
High
Medium
Marketing attribution, B2B lean
Mixpanel
Medium
High
Product analytics, behavioral focus
Amplitude
Medium
High
Product analytics, B2C lean
Heap
Medium
High
Auto-capture, behavioral analysis
GA4
Low
Medium
Free but channel mis-bucketing
Plausible / Fathom
Medium
Medium
Privacy-first, traffic only
The Heap and Mixpanel categories sit in a different lane from the attribution-first tools; they are product analytics tools that can do some attribution. Buying them as your primary attribution layer is a category error. Buying them as your product-analytics layer with a separate attribution tool (Attrifast at the SMB end, Dreamdata at the enterprise end) is the right shape. The comparison piece on Mixpanel and the comparison piece on Amplitude walk this distinction in more detail.
Channel benchmarks by SaaS vertical
Channel mix benchmarks vary substantially by vertical. The numbers below are aggregated across the bootstrapped SaaS sites I have measured in 2025-2026 (n=47 across verticals) and cross-referenced against OpenView SaaS Benchmark data [1], ChartMogul aggregate data [3], and ProfitWell's SaaS Metrics report [7] where coverage overlaps.
Vertical 1: Developer tools and OSS-adjacent SaaS
Channel
Median share of trial signups
Trial-to-paid rate
RPV ($)
Organic search (long-tail technical)
38%
26%
1.42
Direct (incl. AI engines, brand)
24%
30%
1.61
GitHub / OSS referral
11%
22%
1.08
Hacker News / Reddit
7%
18%
0.84
Paid search
5%
14%
0.56
Email (newsletter)
6%
28%
1.51
Twitter / X
4%
12%
0.41
Other
5%
17%
0.72
Developer tools skew heavily organic and direct, with paid channels underperforming because developers run ad blockers at higher rates and respond poorly to paid acquisition. The OSS referral channel (issue links, README mentions, npm package references) is uniquely valuable for this vertical and rarely tracked properly because the referer often appears as a domain unrelated to the package.
Vertical SaaS shows much higher RPV across the board because ACVs are higher (typically $100-500/mo vs $29-99/mo for horizontal SaaS). The industry referral and partner channels are the highest-leverage acquisition motion and are best instrumented via dedicated partner UTM schemes plus first-touch persistence.
Horizontal productivity SaaS faces brutal competition and lower RPV across the board. The single biggest channel-mix risk is over-investing in paid social, which has the lowest trial-to-paid rate and the lowest RPV in this vertical.
Creator tools are paid-social-dominant in acquisition and direct-dominant in conversion. The implication for attribution is that you absolutely need cross-device identity stitching because creators discover on mobile (TikTok, Instagram) and purchase on desktop (Stripe Checkout).
Vertical 5: Fintech and accounting SaaS
Channel
Median share
Trial-to-paid rate
RPV ($)
Organic search (high commercial intent)
31%
24%
3.21
Paid search
22%
19%
2.61
Direct (incl. brand)
18%
27%
3.74
Referral / partner / accountant network
12%
33%
4.51
Content / SEO
8%
22%
2.94
Email
5%
29%
3.91
Paid social
3%
12%
1.61
Other
1%
18%
2.41
Fintech SaaS shows the highest RPV of any vertical because the buying committee is typically accountants or finance leads with explicit budget authority. The partner channel (accountant referrals, finance community recommendations) consistently produces the highest trial-to-paid rate and RPV.
Cross-vertical pattern: AI engine attribution share by vertical
Vertical
Share of sessions from AI engines (Q1 2026)
Trial-to-paid rate
RPV ($)
Developer tools
28-34%
24%
1.32
Vertical SaaS
4-9%
21%
2.41
Productivity SaaS
12-19%
19%
0.84
Creator tools
6-11%
14%
0.61
Fintech SaaS
8-14%
22%
2.94
Developer tools lead AI engine share by a large margin because their buyers actually use ChatGPT and Perplexity for technical research. Vertical SaaS trails because their buyers are still doing industry-keyword Google searches. The companion piece on ChatGPT referral analytics walks the AI-engine attribution architecture in depth.
The five SaaS attribution tools by stage
A pragmatic comparison of the tools SMB SaaS founders actually consider, organized by what stage they fit. The "best for" column is the one most vendor comparisons skip.
Tool
Entry price
Stripe-native?
Cookieless?
Best stage
Best for
Spreadsheet + email
$0
n/a
n/a
$0-5k MRR
Pre-PMF, qualitative learning
Plausible Analytics
$9/mo
No (separate)
Yes
$0-50k MRR
Privacy-focused traffic-only
Fathom Analytics
$15/mo
No (separate)
Yes
$0-50k MRR
Same niche as Plausible
Attrifast
$29/mo
Yes (OAuth)
Yes
$5-500k MRR
SMB SaaS, Stripe-native revenue join
Usermaven
$99-499/mo
Limited
No
$50-500k MRR
Multi-touch with website + product
GA4 (free) + BigQuery
$0-300/mo
No
No
Any (limited)
Sites committed to Google stack
HockeyStack
$1,200+/mo
Partial
No
$500k+ MRR
Marketing-led multi-touch
Factors.ai
$799+/mo
Partial
No
$500k+ MRR
B2B account intent + attribution
Dreamdata
$750+/mo
Yes (warehouse)
No
$1M+ ARR
B2B account-level enterprise
Heap (Contentsquare)
$20k+/year
No
No
$2M+ ARR
Product-led, auto-capture
Mixpanel
$25-833/mo
No
No
$50k+ MRR
Product analytics with cohorts
Amplitude
$49-2k+/mo
No
No
$100k+ MRR
Behavioral cohorts, product-led
The fault line in this list is between attribution-first tools (Attrifast, Dreamdata, Factors.ai, HockeyStack, Bizible) and product-analytics tools that do some attribution (Mixpanel, Amplitude, Heap, June, PostHog). The category confusion is constant; founders buy Mixpanel expecting marketing attribution and discover six months in that the channel-mix dashboard does not match Stripe.
The right shape for most SMB SaaS is one tool per layer: an attribution tool for channel-mix and revenue-by-source decisions, a product analytics tool for in-product behavior and activation, and a simple cohort tool for retention. Conflating them produces dashboards that look comprehensive and answer no actual question.
A word on Heap, Mixpanel, and Amplitude for SaaS attribution
These three tools are sometimes positioned as attribution tools, and they are not. They are product analytics tools with attribution-like features bolted on. The right way to think about each:
Tool
What it is
What it is not
Attribution fit
Heap (Contentsquare)
Auto-capture product analytics
Stripe-native revenue attribution
Use for product analytics, not marketing channel mix
Mixpanel
Event-based product analytics
Marketing attribution tool
Use for funnel analysis, not channel revenue
Amplitude
Behavioral cohort analytics
Stripe-native attribution
Use for retention cohorts, not channel attribution
If your team already runs one of these for product analytics, add a Stripe-native attribution tool alongside. Do not try to make the product analytics tool do marketing attribution; the data model and integration shape are wrong for it.
Setting up SaaS attribution in 30 minutes (the Attrifast workflow)
This is the practical setup walk-through. The article cannot pretend the author has no interest; Attrifast is the tool I built for this. The workflow below is what a $5-50k MRR SaaS should ship to get a working attribution stack in under 30 minutes.
Step 1: Connect Stripe via OAuth (5 minutes). OAuth connection grants read-only access to Stripe events. No API key handling, no service account. The connection authorizes Attrifast to read customer.subscription.*, invoice.payment_*, and checkout.session.* webhook events.
Step 2: Install the tracking script (3 minutes). A 4KB script tag in your site head. Cookieless. Sets a first-party session identifier scoped to your domain. No third-party network requests.
Step 4: Verify Stripe metadata propagation (5 minutes). Ensure your Stripe Checkout creation code passes the session ID into Checkout metadata. The minimal Node.js example:
Step 5: Map your trial-to-paid event (5 minutes). In Attrifast settings, select which Stripe event represents your paid conversion. For trial-based SaaS, this is customer.subscription.updated with status transition trialing → active. For direct paid signups, this is checkout.session.completed.
Step 6: Verify the loop with a test conversion (5 minutes). Run a test purchase through your own site with a known UTM, complete the trial-to-paid flow, and verify the attribution shows up in the dashboard. This is the step most operators skip and the step that catches 80% of integration bugs.
Step 7: Review the dashboard weekly (ongoing, 30 min/week). The three views to check:
View
Metric
Decision it drives
Revenue by channel (last 30 days)
$ attributed per channel
Weekly channel budget tweaks
RPV by channel (rolling 7-day)
Revenue per visitor
Spotting under-performing channels
Trial-to-paid by source (last 90 days)
% of trials that convert
Filtering vanity-traffic channels
That is the full workflow. The setup is intentionally minimal because the operator audience is bootstrapped SaaS founders who do not have a dedicated analytics engineer. The architecture decisions (cookieless, first-party, Stripe-native, OAuth instead of API key) are deliberate to avoid the integration debt that creeps into bigger tools.
Multi-touch attribution: when last-touch actually breaks
Last-touch attribution is the right default for $5-50k MRR SaaS, and it starts producing systematically wrong channel-budget signals above that scale. The break happens for three structural reasons.
Reason 1: The average path lengthens. Forrester's 2024 B2B Buyer Survey [13] puts the average B2B SaaS journey at 7-12 touches across 30-90 days at scale. Last-touch credits one of those touches with 100% of the revenue. The other 6-11 touches get zero credit. The under-credited channels are typically the top-of-funnel ones (organic content, social, podcast mentions, PR) and the over-credited channels are typically the bottom-of-funnel ones (direct, branded search, email).
Reason 2: Brand traffic inflates the "direct" bucket. As your brand grows, more buyers return directly via brand search or URL paste after first discovering you through a top-of-funnel channel. Last-touch attributes all of those returning-buyer conversions to direct, which makes direct look like your highest-converting channel when it is actually your brand-recall channel.
Reason 3: AI engine citations land in direct. Per the ChatGPT referral analytics piece, 65-82% of AI engine referrals land in GA4's direct bucket because the AI client strips the referer header. Last-touch on direct then credits AI for nothing while crediting direct for AI's traffic.
The honest decision tree for when to upgrade from last-touch to multi-touch:
Signal
Upgrade to multi-touch?
MRR above $50k and growing >10% MoM
Consider
MRR above $250k
Yes for position-based
MRR above $500k and >1k conversions/month
Yes for data-driven
AE-assisted motion with multi-stakeholder deals
Yes earlier (around $100k MRR)
Channel mix has more than 6 active channels
Yes for position-based
Top of funnel feels "unrewarded" in current dashboard
Yes for first-touch + last-touch
Sub-$50k MRR
No, premature
Channel mix is <4 channels
No, last-touch is sufficient
The position-based model implementation:
Touch position
Credit weight (U-shaped)
Credit weight (W-shaped, with trial signup)
First touch
40%
30%
Trial signup
n/a
30%
Last touch
40%
30%
Middle touches (evenly split)
20% total
10% total
The W-shaped model is the right default for trial-based SaaS because it explicitly weights the trial signup event as a meaningful funnel milestone, not just another middle touch. The 30/30/30/10 split usually produces the cleanest channel-budget signal for B2B SaaS with a self-serve trial motion.
The OnDeck cohort writeups and Bessemer's State of the Cloud [2] consistently argue that operators should pick a single attribution model and stick with it for at least 6 months before evaluating, because the variance in any model month-to-month is high enough that chasing the latest number produces worse decisions than committing to a model and reading the trend.
Common SaaS attribution mistakes I see
Ten mistakes I have seen often enough to call them patterns, with the fix for each.
Mistake 1: Buying enterprise attribution before product-market fit. Founders sign $9k Dreamdata contracts at $30k MRR because their board pushed for "real attribution." The tool sits unused because the data volume is too thin. Fix: stage-match the tool to MRR per the table above. Below $50k MRR a $29/mo tool produces 90%+ of the decision value of a $750/mo tool.
Mistake 2: Setting Stripe metadata on Checkout Session only. The metadata does not propagate to Subscription or Customer objects automatically. The customer.subscription.created webhook fires without the attribution data. Fix: set metadata on Customer and Subscription objects too, or use a webhook handler that reads from the Checkout Session by session ID.
Mistake 3: Attributing trial-to-paid on the conversion-day session. The marketing touch that drove the trial happened weeks earlier. The fix is to persist the trial-signup source on the user record and join back on subscription.updated events.
Mistake 4: Using GA4 as the source of truth for revenue. GA4 understates revenue by 18-35% versus Stripe across the sites I have measured. Ad blockers, cross-device gaps, and channel mis-bucketing compound. Fix: Stripe is the revenue source of truth, GA4 is at best a traffic source.
Mistake 5: Conflating product analytics with marketing attribution. Mixpanel, Amplitude, and Heap are product analytics tools. They do not natively do marketing channel attribution. Fix: separate tools for separate jobs. Product analytics for in-product behavior, attribution tool for channel revenue.
Mistake 6: Jumping to multi-touch attribution too early. Multi-touch produces noisier signals than last-touch below $250k MRR. Fix: last-touch as default below $50k MRR, last-non-direct between $50-250k MRR, position-based above $250k MRR.
Mistake 7: Not capturing first-touch. Even at the last-touch-only stage, capture first-touch on a separate field. The cost is one cookie or session field; the value is the diagnostic signal when channels behave unexpectedly.
Mistake 8: Treating free trial signups as conversions. Free trial signups are funnel milestones, not revenue events. Attributing budget against trial signups over-credits high-volume low-intent channels (paid social) and under-credits high-intent low-volume channels (referral).
Mistake 9: Ignoring channel-specific trial-to-paid conversion rates. Two channels can produce the same trial signup count and very different paid revenue because their trial-to-paid rates differ by 2-3x. Fix: the dashboard view that matters is paid-revenue-per-channel, not trial-signups-per-channel.
Mistake 10: Not auditing the "direct" bucket. Direct contains real direct + brand recall + AI engine referrals + email-app clicks + Slack-app clicks + a long tail of misclassifications. Treating it as a homogeneous "brand strength" signal is the most common analytics error in 2026. Fix: monthly audit of direct by landing page and behavioral signal.
What this looks like inside Attrifast
A short note on the product. Attrifast is the Stripe-native attribution tool I built for the $5-500k MRR SaaS stage where Dreamdata is too expensive and GA4 is too inaccurate. The five things it does differently:
Pricing is $29/mo for the entry tier, which covers the stated session volume and includes the AI engine breakdown and Stripe revenue join. The pricing page and the bootstrapped SaaS landing page walk the full pricing and feature matrix. The Stripe-specific feature page covers the Stripe integration architecture in more detail, and the revenue attribution feature page walks the attribution model options.
The first-person reason I built it: I was the operator with my own SaaS in 2024, looking at a GA4 dashboard that did not match my Stripe dashboard, paying for tools that did not close the loop to revenue, and unable to justify $9k for an enterprise attribution tool at sub-$50k MRR. There was no Stripe-native attribution tool at the SMB end of the market that did the trial-to-paid join correctly. Attrifast is that tool.
Limitations
Five things this article does not cover, and you should not extrapolate past.
Account-based attribution for AE-led B2B. When your sales motion involves a multi-stakeholder buying committee, the right unit of attribution is the account, not the individual user. This article focuses on self-serve and lightly-assisted SaaS. For account-based attribution at enterprise scale, Dreamdata and Factors.ai are the right tools and the architecture is different from what is described above.
Marketing mix modeling (MMM). MMM uses statistical regression on aggregate marketing spend and revenue data to estimate channel incrementality. It is the right tool above $5M ARR with multi-million-dollar channel spend, and it is orthogonal to click-level attribution. This article does not cover MMM.
Incrementality testing. The gold standard for proving channel ROI is randomized incrementality testing (holdout groups, geo experiments). It is operationally expensive and requires statistical power that most sub-$1M ARR SaaS does not have. This article assumes correlational attribution, not incrementality measurement.
Cross-domain identity stitching. When users move between mobile apps, web, and email, identity stitching across domains is its own architecture problem. The cookieless-first approach in this article handles single-domain stitching well; cross-domain requires either a customer data platform (Segment, RudderStack) or custom identity resolution.
Consent management and regulatory variance. Cookieless first-party attribution is compliant under most jurisdictions in 2026, but EU ePrivacy, UK PECR, and California CPRA have nuances that depend on your specific implementation. Always verify with privacy counsel for your jurisdiction.
FAQ
Do I need a SaaS marketing attribution tool below $5k MRR?
No. Below $5k MRR your sample size is too small for any attribution model to produce statistically meaningful per-channel numbers, and the operator time spent maintaining the tool is better spent talking to customers. The minimum useful instrumentation at this stage is one weekly question to every paying customer ("how did you hear about us"), a single UTM scheme on every URL you publish, and a manual spreadsheet that joins those answers to Stripe MRR. Anything beyond that, including Dreamdata, Factors.ai, Heap, Mixpanel, or even Attrifast, is premature optimization. The honest answer most attribution vendors will not give you: come back when you have 30+ paying customers.
When does last-touch attribution actually break for SaaS?
Last-touch starts producing systematically wrong channel-budget signals somewhere between $50k and $100k MRR for B2B SaaS, and slightly later for B2C SaaS. The break is structural: at that scale your buyers are running multi-touch journeys averaging 7-12 touches across 30-90 days, and giving 100% of the conversion credit to the final touch (usually direct or branded search) systematically under-credits the top-of-funnel channels that started the journey (organic content, social, podcast mentions, PR). The fix is not to abandon last-touch but to add a "last-non-direct" or "first-touch + last-touch" overlay. Pure multi-touch attribution models add operational cost that most sub-$500k-MRR teams cannot justify.
What is the cheapest SaaS marketing attribution stack that actually works?
Stripe Checkout with UTM metadata pass-through plus a first-party tracking script that fires on every page plus a session-to-Stripe-customer join via webhook. Total cost: $29/mo for the attribution tool, $0 for Stripe, and a one-time 30-minute setup. This catches roughly 92-96% of paid signups across the SMB SaaS sites I have measured, with the residual being users who clear UTM tags by visiting the homepage before checkout. Attrifast ships this stack out of the box. Rolling it yourself takes a weekend if you already know Next.js middleware and Stripe webhooks; longer if you do not.
How do I attribute a free trial that converts to paid 21 days later?
Attribute the trial signup to its acquisition source, persist the session ID and source on the user record at trial start, then when the trial converts (Stripe subscription.created event), join the conversion back to the original trial-signup source. The common mistake is attributing the paid conversion to whatever the user did the day they upgraded (usually a direct visit to /billing or a click from an in-app upgrade prompt), which credits "direct" or "in-app" for what was actually a paid-search-driven trial three weeks earlier. The right model is first-touch-on-trial-signup as the default, with a last-non-direct overlay for diagnostic purposes.
Is Dreamdata or Factors.ai worth it for a $30k MRR SaaS?
No. Dreamdata's published entry pricing sits north of $750/mo as of mid-2026, and Factors.ai's comparable tier sits in a similar band. Both are excellent products built for enterprise B2B sales motions with multi-stakeholder buying committees and 60-180 day sales cycles. The data infrastructure they wrap (Snowflake, ETL connectors, identity resolution at scale) is overkill for an SMB SaaS with self-serve trial signups and a 7-14 day sales cycle. The honest math: $750/mo against a $30k MRR business is 2.5% of revenue, against incremental decision value that does not materialize until your channel mix is complex enough to need a 7-touch model. Wait until $100k+ MRR.
What is RPV and why does it matter more than CAC for early SaaS?
RPV is revenue per visitor, calculated as total attributable revenue divided by total sessions per channel over a defined period. It matters more than CAC for early-stage SaaS because CAC requires a cohort-completion window (typically 30-90 days for trial-to-paid SaaS) before the number stabilizes, while RPV updates in near-real-time as sessions and Stripe events flow in. RPV by channel is the fastest signal you can get on which channels are working, with the tradeoff that it includes returning users and brand traffic in the denominator. Use RPV for weekly channel-mix decisions and CAC for quarterly budget setting.
How does B2B SaaS attribution differ from B2C SaaS or e-commerce attribution?
Three structural differences. First, sales cycles: B2B averages 30-90 days from first touch to paid conversion versus 1-7 days for B2C SaaS and minutes-to-hours for e-commerce, which makes single-session last-touch attribution far less reliable for B2B. Second, free trials: B2B SaaS typically runs 14-30 day trials with a 15-25% trial-to-paid conversion rate, which breaks attribution because the conversion event is decoupled from the marketing touch. Third, buying committees: B2B purchases often involve 3-7 stakeholders, of whom only one signs up, so the "who clicked the ad" identity does not map cleanly to "who decided to buy". E-commerce has none of these problems and can run pure last-touch reliably.
Should I use first-touch, last-touch, or multi-touch attribution for my SaaS?
Below $50k MRR, run last-non-direct as the default and capture first-touch on the side for diagnostic purposes. The volume is too low for any multi-touch model to produce stable channel-budget signals. Between $50k and $500k MRR, run a position-based model (40% first touch, 40% last touch, 20% middle touches) or a U-shaped variant. Above $500k MRR, consider data-driven attribution if you have the data volume to support it. Above $5M MRR, custom multi-touch with marketing-mix modeling enters the picture. The single biggest mistake is jumping to multi-touch too early; the model produces noisier signals than last-touch until you have thousands of conversions per month.
Why does GA4 show different revenue numbers than my Stripe dashboard?
Five reasons compound. First, ad-blocker drop-off: GA4 misses 15-30% of sessions and the same percentage of conversion events due to ad blockers and tracking-prevention browsers. Second, cross-device gaps: GA4 attributes mobile-to-desktop journeys as two separate users unless you set up signed-in cross-device tracking. Third, channel mis-bucketing: GA4 buckets Stripe Checkout redirects as direct or referral instead of preserving the original source. Fourth, refunds and chargebacks: GA4 does not subtract refunds, Stripe does. Fifth, currency conversion: GA4 reports in your property currency, Stripe reports in the transaction currency. The gap is typically 18-35% with GA4 understating revenue. Trust Stripe.
How do I attribute self-serve signups versus AE-assisted deals in the same SaaS?
Run two attribution surfaces. For self-serve, instrument every page with first-party tracking and join Stripe Checkout sessions to source on the webhook. For AE-assisted, capture the first touch on the lead (form submission, demo request) and propagate it through your CRM to the opportunity and closed-won record. The cleanest implementation is to write the first-touch UTM and session ID onto the Stripe Customer metadata at customer creation regardless of path, then reconcile in your warehouse. The mistake is using two different attribution models for the two paths, which makes channel-budget allocation impossible across them.
What channel benchmarks should I expect for a bootstrapped B2B SaaS?
Across the bootstrapped B2B SaaS sites I have measured in 2025-2026, the median channel mix on the trial-signup event sits at roughly 35% organic search, 18% direct (which is heavily AI referrals plus brand recall), 14% paid search, 11% social organic, 8% referral, 6% email, 5% paid social, and 3% other. Trial-to-paid conversion rates by channel typically run 22-28% on direct, 18-24% on organic search, 14-20% on paid search, 12-18% on social organic, and 8-14% on paid social. The pattern: channels with higher commercial intent at the click convert better at trial-to-paid, which is the inverse of what you would expect for top-of-funnel only.
Can I do SaaS attribution without cookies and without a consent banner?
Yes, and you should. The minimum stack is a first-party tracking script that fires on every page, a server-side session store keyed on a first-party identifier, and a Stripe Checkout metadata field that carries the session ID into the webhook. None of those three pieces requires a third-party cookie or a consent banner under most jurisdictions (still verify with your privacy review). The advantage beyond compliance: first-party tracking survives ITP, Safari's tracking prevention, and the next round of privacy regulation in a way that GA4 plus a Stripe webhook does not. This is the architecture Attrifast ships.
What is the trial-to-paid attribution problem and how do I fix it?
The problem: the marketing touch that drove the trial signup happened days or weeks before the trial-to-paid conversion event, and most attribution tools attribute the revenue to whatever the user did the day they upgraded (usually a direct visit). The fix is to persist the first-touch and trial-signup-touch sources on the user record, then on the Stripe subscription.created event, join back to those original sources rather than the most recent session. Technically straightforward; operationally rare because most attribution tools do not natively span the trial window. Attrifast's revenue join uses subscription.created with first-touch preservation by default.
How long does it take to set up SaaS attribution from scratch?
If you use a turnkey tool like Attrifast: 5-30 minutes including connecting Stripe via OAuth and adding the tracking script to your site. If you roll it yourself: 1-3 days for a competent full-stack engineer to build the tracking script, session store, Stripe webhook handler, and basic dashboard, plus another 2-5 days to add UTM parameter persistence, cross-domain stitching, and free-trial-window attribution. If you try to make GA4 + BigQuery + custom dashboards do the same job: 2-6 weeks and ongoing maintenance debt. The build-vs-buy decision tilts toward buy below $200k MRR and starts to tilt toward custom infrastructure above $2M MRR with a dedicated analytics engineer.
Is multi-touch attribution worth it for SaaS at any scale?
Yes, but later than the consultant deck implies. Multi-touch starts producing better channel-budget signals than last-touch somewhere between $500k MRR and $2M MRR for self-serve B2B SaaS, and earlier (around $250k MRR) for AE-assisted B2B SaaS with multi-stakeholder buying committees. Before that scale, the variance in multi-touch model outputs is high enough that the operator decisions it drives are no better than last-touch decisions and the model maintenance cost is real. The honest progression: last-touch then last-non-direct then position-based then data-driven, advancing one step per ~10x revenue scaling.