How to Track Signups by Traffic Source Without Hacking

Written by Chartsy Team
September 29, 2026
15 min read
How to Track Signups by Traffic Source Without Hacking

Track signups by traffic source by capturing the source on the first visit, carrying it through account creation, and matching it to billing data. Source preservation is the main bottleneck, especially when modern attribution systems can miss 30% to 60% of customer touchpoints because of cookie deprecation and iOS restrictions, as documented by Usermaven's attribution guide.

You've probably seen the frustrating version of this problem. Traffic looks healthy, signups keep arriving, and then someone asks which channel produced the customers. Your website analytics show visits, your billing system shows recurring revenue, and the original source has disappeared somewhere between the landing page and the subscription.

The fix usually isn't another dashboard. It's a reliable connection between first visit, signup, paying customer, and subscription revenue. Once that chain survives the user journey, reporting becomes much more useful for growth, marketing performance, MRR, and churn.

Table of Contents

Why Signup Source Tracking Feels Broken

SaaS teams often begin with a simple question: “Where did this signup come from?” The answer sounds easy because every visit appears to have a source. In practice, the source can be lost when someone returns later, switches devices, clicks an untagged email link, uses a bookmarked page, or signs up after several interactions.

Customer acquisition metrics depend on tracking conversion by source. Traffic-source signup tracking gives teams a common measurement layer for comparing organic search, paid ads, referrals, and email, rather than judging channels by visits alone, as explained in IBM's overview of customer acquisition metrics.

The three jobs your tracking system must do

A useful signup attribution setup has three separate responsibilities:

  1. Capture the source at arrival. Store UTMs, referrers, click IDs, landing-page details, and campaign metadata when a visitor first reaches the site.

  2. Preserve the source across the journey. Connect return visits and sessions to the same visitor or account, rather than replacing the original source every time the person comes back.

  3. Confirm the business outcome. Match the signup to a paying customer and subscription record so you can distinguish acquisition activity from recurring revenue.

Most broken reports handle only the first job. They collect a UTM parameter in the browser, but never carry it into the signup record or billing system. The result is a clean-looking source chart that answers where visits came from, not which sources produced customers.

Practical rule: Treat source data as part of the customer record, not as a temporary browser detail.

Last-touch reporting creates another problem. A visitor may discover your product through a content article, return through a referral, revisit from a branded search, and sign up directly. If you record only the final session, direct traffic receives the credit while the earlier demand-creating channel disappears. That doesn't prove the earlier channel caused the conversion, but it does show why a single touchpoint can't describe the whole path.

The Chartsy attribution documentation provides a useful mental model for separating source information from the attribution decision. First preserve what you observed, then decide how you want to assign credit.

Why a perfect model isn't the first priority

Small SaaS teams can spend weeks debating first-touch, last-touch, linear, time-decay, and U-shaped attribution while their source fields remain inconsistent. That's backwards. A modest system with durable first-source and signup-source fields is more valuable than an advanced model built on missing data.

Start by answering three operational questions:

  • Which source initiated the visitor's relationship with the product?
  • Which source was present when the visitor signed up?
  • Did that signup become a customer with recurring revenue?

Once those fields are trustworthy, you can compare models without pretending that incomplete data is precise. The reporting becomes a decision aid, not a claim of causation.

Client-Side Versus Server-Side Source Capture

Client-side capture is usually the fastest way to begin. JavaScript reads URL parameters and referrers, then stores the values in a cookie, local storage, or an analytics event. It's accessible to a solo founder and often enough to validate whether your signup form is receiving source data.

The weakness is durability. Browser restrictions, ad blockers, consent choices, deleted cookies, and cross-device journeys can interrupt the connection. A user might discover your SaaS on a phone and create an account on a laptop. A client-side identifier stored only on the phone won't automatically follow them.

Server-side capture takes more work but gives you a stronger control point. Your application can receive source parameters, create or associate a visitor identifier, store the session details in your own system, and attach the relevant record when an account is created. Server-side handling doesn't solve every identity problem, but it reduces dependence on the browser remaining cooperative.

A comparison graphic showing the differences between client-side and server-side tracking methods for data collection.

Compare the practical trade-offs

Aspect Client-side capture Server-side capture
Setup effort Faster to install with JavaScript and tagged URLs Requires backend handling and data storage
Main inputs UTMs, referrers, cookies, browser events Redirects, click IDs, session records, first-party identifiers
Strength Useful for quick campaign and signup reporting More durable across sessions and application events
Common failure Ad blockers, browser restrictions, deleted storage, cross-device gaps More engineering effort and identity-joining decisions
Best starting point Early validation and simple marketing flows Subscription businesses with longer consideration journeys

A third approach is identity stitching. The system begins with an anonymous visitor identifier, then connects that identifier to an account at signup. This lets you join pre-signup behavior with post-signup billing activity without relying only on a name or email match.

The technically sound sequence is to capture source signals at arrival, connect sessions and return visits, identify the visitor at signup, record the conversion, apply an attribution model, and connect the result to CRM and billing data. That sequence matters because each step answers a different question, and skipping one creates a blind spot.

For a small team, the practical choice usually isn't “client-side or server-side forever.” Use client-side capture to get the basic flow working, then add server-side persistence where the business outcome matters most, especially account creation and payment. Chartsy's website tracking setup documentation is relevant for teams that want to connect website activity with signup reporting without starting with a full warehouse.

The approach that doesn't work well is pure UTM appending with no persistence. It looks simple in campaign reports, but it breaks as soon as a user returns through an untagged path or completes signup in a different session.

Setting Up UTM Tracking and Session Joining

A durable setup starts with naming discipline, not an elaborate data architecture. Before adding tools, decide how your team will label sources, mediums, and campaigns. If one campaign uses linkedin, another uses LinkedIn, and a third uses social, your report will treat one channel as several unrelated sources.

Use a short written convention for utm_source, utm_medium, and utm_campaign. Keep the values readable, consistent, and stable enough for monthly reporting. Your goal isn't to describe every detail in the URL. It's to make channel comparisons possible.

Capture the first visit

At the first arrival, store the available source signals:

  • Campaign metadata: Record UTM source, medium, campaign, and any useful content or term fields.
  • Referrer: Preserve the referring domain when no campaign parameters exist.
  • Landing page: Keep the first page because it helps explain which offer introduced the visitor.
  • Timestamp: Record when the first observed visit occurred.
  • Visitor identifier: Assign a first-party identifier that can be connected to later sessions.

Keep the original source separate from the latest source. Don't overwrite the first campaign every time the same person returns. You can add a current-session source field, but the initial source should remain stable.

A small user-journey table is enough at the beginning. Each row can contain a visitor identifier, timestamp, referrer, UTMs, landing page, session identifier, and event type. At signup, connect the anonymous record to the account. Later, connect the account to the customer and billing record.

Join sessions before you model attribution

Session joining means recognizing that multiple visits belong to the same journey. The join can use a persistent first-party visitor ID, an account identifier after signup, or another stable internal key. It won't be perfect, particularly across devices, but it's more informative than treating every session as a new person.

Avoid building a warehouse before you know what decisions the report must support. Start with the questions your team asks:

  • Which sources generate signups?
  • Which sources generate customers?
  • Which initial sources are associated with recurring revenue?
  • Which signup-time sources appear frequently but rarely become paid accounts?

The SaaS UTM tracking guide for founders offers a practical reference for organizing campaign parameters around these questions.

Step What to verify
First arrival UTMs, referrer, landing page, timestamp, and visitor ID are captured
Return visit The original source remains available and isn't overwritten
Signup The visitor or session connects to the new account
Conversion The signup event has a clear timestamp and account identifier
Billing handoff The account identifier connects to the subscription record
Reporting First source and signup-time source can be compared separately

Tag the traffic that pretends to be direct

Direct traffic is often a classification problem. Email, messenger apps, private communities, and bookmarks may not pass a referrer. If campaign links aren't tagged, those visits can appear as direct even when a marketing activity initiated them.

Tag links in lifecycle emails, partner messages, launch announcements, and community posts. Keep internal links untagged unless you have a specific reporting reason, because tagging internal navigation can overwrite the external source you're trying to preserve.

Also record missing data. "Unknown" is more useful than assigning a questionable source without flagging it. A report that distinguishes known, inferred, and missing attribution gives you a better basis for improving collection.

Why Last-Touch Attribution Misleads SaaS Teams

A signup is often the end of a longer consideration process. A founder might publish an educational article, run a paid campaign, receive a referral, and send an onboarding email before the visitor finally types the product name into a browser. Last-touch reporting sees the final direct or branded-search visit. It doesn't see which earlier interaction created the interest.

A conceptual funnel illustration showing various colored data lines merging into a single base of gold coins.

First-touch and last-touch answer different questions. First-touch indicates which channel introduced the product or created initial demand. Last-touch indicates which source was present at signup. Neither one proves that the credited source caused the purchase.

Zapier's explanation of marketing attribution captures the practical distinction: first-touch shows initial demand creation, while last-touch can over-credit direct visits and retargeting at signup. For SaaS teams, preserving both fields is more useful than forcing one model to answer every question.

Read the two source fields together

Suppose a hypothetical visitor first arrives from an organic article, returns through a partner referral, and signs up after a branded search. A first-touch report assigns the initial source to organic search. A last-touch report assigns the signup to branded search. Both observations can be true.

The mistake is choosing one and deleting the other. Keep:

  • Initial source: The first known channel associated with the visitor.
  • Signup source: The source attached to the session or interaction that produced the signup.
  • Customer status: Whether the account later became paying.
  • Revenue outcome: The subscription value and subsequent movement connected to that customer.

This lets you ask whether content creates demand but closes slowly, whether referrals bring fewer signups but stronger customer quality, or whether paid campaigns produce signups that rarely progress. Those are hypotheses to investigate, not automatic conclusions.

Attribution describes observed paths. It doesn't prove that one channel caused a customer to buy.

A retargeting ad may appear near the end because the user already knew the product. Direct traffic may reflect earlier awareness rather than independent demand. Conversely, a final-touch channel may contribute important decision support. The report should preserve the evidence without turning a correlation into a causal claim.

For teams reviewing performance, compare signup counts with paid conversion, recurring revenue, and retention. A source that creates many free accounts may deserve a product or onboarding investigation. A source that creates fewer accounts but more paying customers may deserve closer attention. You won't know which interpretation fits until the source is connected to billing.

A useful reporting cadence also matters. Review initial source, signup source, and customer outcomes together rather than changing budget based on one platform's default attribution. Platform reports reflect the platform's own view, not the complete customer journey.

Matching Source to Revenue and Churn

Signup tracking becomes commercially useful when it reaches the billing record. A signup tells you that someone created an account. It doesn't tell you whether the account paid, upgraded, downgraded, reactivated, or churned.

For Stripe users, Stripe Billing analytics documentation defines MRR as the monthly-normalized value of active and past-due subscriptions. Stripe excludes taxes, free plans, and metered products from that MRR definition, and records customer MRR changes through new subscribers, upgrades, downgrades, reactivations, and churn.

Build the revenue join around a stable identifier

The source record and the billing record need a common key. In a typical SaaS flow, the visitor receives a first-party identifier, creates an account, and then receives an internal customer or subscription identifier. That identifier should persist into Stripe or Paddle data.

Avoid depending on name matching. Names change, shared inboxes exist, and the same person may use different email addresses across a product account and a payment record. A stable account-to-customer relationship is easier to audit and less likely to assign revenue to the wrong source.

A monthly source report should show more than signups:

View Question
Source to signup Which channels initiate or complete account creation?
Source to paid account Which channels produce customers rather than only free users?
Source to MRR Which sources are associated with recurring subscription value?
MRR movement Are changes coming from new revenue, expansion, contraction, reactivation, or churn?
Plan mix Do sources attract different subscription plans or customer segments?
Retention Do customers from the source remain active over time?

Paddle Billing provides subscription analytics covering MRR, churn, LTV, ARPU, and cohort reports, while Paddle's metrics documentation notes that monthly, quarterly, and annual subscription periods are converted into monthly values for comparison. Paddle Classic users should treat the available billing fields and connection behavior as a separate implementation detail rather than assuming every Billing metric is identical.

Interpret changes without inventing causes

If MRR falls among customers associated with a particular source, you can observe the decline and inspect whether the movement came from churn or contraction. You can't conclude that the marketing source caused cancellations unless you have supporting product, support, or customer research evidence.

The same discipline applies to growth. A channel may be associated with new subscribers, while upgrades later contribute more to MRR. Another may produce initial customers who remain on their original plan. Reporting should expose these patterns so the team can investigate them.

For teams without an analyst, a practical dashboard can contain source-level signups, paying customers, MRR, MRR movements, plan mix, and churn. Plain-English AI analysis can help a founder ask questions about those connected records and turn the answer into a chart or table, but the underlying identifiers and definitions still determine whether the result is trustworthy.

When Source Data Goes Missing and How to Respond

Some attribution loss is unavoidable. Cookies are deleted, browsers restrict tracking, users switch devices, and private links may arrive without referrers. Modern multi-touch systems can miss 30% to 60% of customer touchpoints in these conditions, according to the source-attribution analysis from Usermaven. For a small SaaS team, that gap can leave several signups marked Unknown unless first-visit persistence and billing-level confirmation are connected.

Avoid accepting the advertising platform with the highest conversion count as the truth. Its report covers only the platform's measurement boundary, so it may exclude sales conversations, product activity, referrals, and other channels.

Use explicit fallback states:

  • Known source: A stored UTM or referrer reached signup.
  • Persisted source: An earlier capture was joined through an identifier.
  • Unknown source: No reliable signal survived.
  • Inferred source: A team interpretation is separated from observed data.

Capture first-party source data on the first visit, preserve it through signup with a visitor ID or cookie, then connect it to the account and billing customer. Chartsy's SaaS revenue attribution guidance explains why matching by name or email can fail. The practical goal is to confirm whether a signup became a paying account, not to force a guess when first-touch data disappeared.

Fix the missing link first. If UTMs vanish, repair campaign tagging. If return visits create new users, improve persistence. If signups do not connect to payments, repair the account-to-customer identifier. If revenue connects but source rankings look suspicious, compare first-touch with signup-time fields before changing spend.

Chartsy connects traffic and signup sources with Stripe, Paddle Billing, and Paddle Classic data, letting small SaaS teams review paying customers, MRR movements, and churn without a complex reporting stack. Visit Chartsy to explore source-to-revenue reporting.

Chartsy Team

Written by

Chartsy Team

Analytics team at Chartsy

The Chartsy Team writes guides, product updates, and resources to help SaaS and eCommerce founders make sense of their metrics, without SQL or spreadsheets.

Chartsy
Ministry of Economy and Innovation
Startup Albania

The Chartsy program is realized with the financial support of the Albanian Government through the Ministry of Economy and Innovation, under the Grant 2026 scheme, and is implemented by the Innovation4Albania Agency.