Attribution

Understand which channels and touchpoints drive conversions with multi-touch attribution

Overview

GrowQR Attribution helps you answer the most important question in marketing: which touchpoints actually drove the conversion? When a customer clicks your links across multiple channels — an email on Monday, a social post on Wednesday, and a paid ad on Friday before finally purchasing — Attribution determines how credit is distributed among those interactions.

Rather than defaulting to a single, rigid model, GrowQR offers multiple attribution models so you can analyze the same conversion data through different lenses. This gives you a nuanced understanding of how your channels work together to drive results, not just which one happened to be last.

What Problem It Solves

Most link shorteners attribute every conversion to the last click. This creates a systematic bias toward bottom-of-funnel channels like retargeting ads and branded search, while undervaluing top-of-funnel efforts like content marketing, social media, and influencer partnerships. Teams that rely solely on last-click data end up over-investing in channels that capture demand and under-investing in channels that create it.

GrowQR Attribution solves this by tracking the full sequence of GrowQR link clicks that precede a conversion and applying configurable attribution models. You see the complete customer journey, and you choose how to distribute credit — so budget decisions are based on the full picture, not a single data point.

How It Works

Attribution in GrowQR is powered by touchpoints and conversions working together:

1. Touchpoint Collection

Every time a visitor clicks a GrowQR link, the redirect server creates a touchpoint record with:

FieldSource
visitorIdHash of IP address + User-Agent string (deterministic)
urlIdThe short link that was clicked
campaignIdThe campaign the link belongs to (if any)
channelDerived from utm_medium or defaults to "link"
utmSource, utmMedium, utmCampaign, utmTerm, utmContentFrom the link's UTM configuration
referrerThe page the visitor clicked from
deviceTypeParsed from User-Agent (desktop, mobile, tablet)
countryGeoIP lookup
ipAddressVisitor's IP
positionSequential position (1st click, 2nd click, etc.) for this visitor

Touchpoints are created automatically — no pixel or configuration required.

2. Visitor Identity Stitching

GrowQR links a visitor's clicks to their conversions using visitorId:

  • Redirect flow: The server computes visitorId = SHA-256(IP + "::" + User-Agent), truncated to 32 characters.
  • Pixel flow: The tracking pixel sets a _us_vid cookie (1-year expiry) and sends it with every trackConversion() call.
  • Fallback: If the pixel doesn't send a visitorId, the conversion endpoint computes the same IP+UA hash, which matches the touchpoint created during the click.

This means a visitor who clicks a link and later converts on the same device will be matched, even without cookies, as long as their IP and User-Agent haven't changed. For cross-session reliability, the cookie-based approach is more accurate.

3. Conversion Matching

When a conversion event fires (via the pixel or webhook), GrowQR:

  1. Resolves the visitorId (from the request body or IP+UA hash).
  2. Retrieves all touchpoints for that visitorId within the goal's attribution window (default: 720 hours / 30 days).
  3. Applies the configured attribution model to select or weight the touchpoints.
  4. Links the conversion to the attributed URL and campaign.

4. Model Application

The selected model distributes credit across the touchpoints:

ModelHow Credit Is DistributedBest For
First-Touch100% credit to the earliest touchpointMeasuring awareness and top-of-funnel effectiveness
Last-Touch100% credit to the most recent touchpointMeasuring bottom-of-funnel and closing effectiveness
LinearEqual credit to every touchpointA balanced view when all channels contribute equally
Time-DecayMore credit to touchpoints closer in time to the conversionValuing recency while still crediting earlier interactions
Position-Based40% to first touch, 40% to last touch, 20% split among middle touchesCrediting both discovery and closing channels

You can view all models simultaneously in the comparison view to see how credit shifts across channels.

Step-by-Step Usage

Setting the Attribution Model for a Goal

Each conversion goal has its own attribution model:

  1. Go to Dashboard → Conversions → Goals.
  2. Click a goal to edit it.
  3. Set the Attribution Model (default: LAST_TOUCH).
  4. Set the Attribution Window in hours (default: 720 hours = 30 days).
  5. Save.

When a conversion fires for this goal, GrowQR uses the configured model to select the touchpoint that gets credit.

Reading the Attribution Report

Navigate to Dashboard → Attribution to access the report. Use the model selector at the top to switch between views.

Channel Summary Table — Lists each channel (derived from utm_medium or referrer) with attributed conversions:

Channel        First-Touch   Last-Touch   Linear    Time-Decay   Position-Based
──────────────────────────────────────────────────────────────────────────────────
Email             142.0        98.0        112.5      105.3          118.4
Social            201.0       134.0        156.8      141.2          162.0
Paid Search        87.0       178.0        124.3      155.7          139.0
QR Code            63.0        42.0         51.4       46.8           50.2
Direct             12.0        53.0         60.0       56.0           35.4

Values are fractional for Linear, Time-Decay, and Position-Based models because credit is split across touchpoints.

Journey Explorer — Individual conversion journeys showing every touchpoint in sequence. Click any journey to see:

  • Each GrowQR link clicked, with timestamp and channel
  • Time between touchpoints
  • The conversion event and its value
  • Credit distribution under each model

Channel Comparison Chart — A grouped bar chart that visualizes how each model values each channel. This is the most useful view for spotting channels that are undervalued by last-touch but critical for initiating journeys.

Ensuring Accurate Touchpoint Data

Touchpoints are collected automatically on every link click. To maximize accuracy:

  • Use UTM parameters on every link. Without them, the channel defaults to "link" and the source is unknown.
  • Install the pixel site-wide. The _us_vid cookie provides a more reliable visitorId than IP+UA hashing for cross-session attribution.
  • Set an appropriate attribution window. Only touchpoints within the window are considered. Too short, and you miss assisted conversions. Too long, and you attribute conversions to stale clicks.

Generating Attribution Reports

  1. Select a date range for the conversions you want to analyze.
  2. Choose one or more conversion goals to include (e.g., only "Purchase" events).
  3. Select the attribution model(s) to apply.
  4. Optionally filter by campaign, tag, or channel.
  5. Click Generate Report.

Reports can be exported as CSV or PDF. Scheduled reports can be configured to run weekly or monthly and delivered via email.

Comparing Channels

The most common use of attribution is answering "Where should I spend my next marketing dollar?" To do this:

  1. Open the Attribution report with the Linear model for a balanced starting point.
  2. Note which channels have the highest attributed conversions relative to spend.
  3. Switch to First-Touch to see which channels are best at initiating new customer journeys.
  4. Switch to Last-Touch to see which channels close the deal.
  5. Switch to Position-Based for a compromise that credits both discovery and closing.
  6. Use these perspectives together to build a balanced channel investment strategy.

The Touchpoint-to-Conversion Flow

Here's a concrete example of how the system tracks a visitor across multiple touchpoints:

Day 1:  Visitor clicks email link (utm_source=newsletter)
        → Redirect server creates Touchpoint #1
          visitorId: "a3f8c2..." (SHA-256 of IP+UA)
          urlId: "link-001"
          channel: "email"
          position: 1

Day 3:  Same visitor clicks social link (utm_source=twitter)
        → Redirect server creates Touchpoint #2
          visitorId: "a3f8c2..." (same hash)
          position: 2

Day 5:  Visitor clicks paid ad link (utm_source=google)
        → Redirect server creates Touchpoint #3
          visitorId: "a3f8c2..." (same hash)
          position: 3

Day 5:  Visitor completes purchase on your site
        → Pixel fires trackConversion({ value: 99.99 })
          visitorId: "a3f8c2..." (from _us_vid cookie or IP+UA hash)

        → GrowQR retrieves Touchpoints #1, #2, #3
        → Applies the goal's attribution model:
          • First-Touch:  100% → Touchpoint #1 (email)
          • Last-Touch:   100% → Touchpoint #3 (paid)
          • Linear:       33% each
          • Position-Based: 40% #1, 20% #2, 40% #3

Best Practices

  • Don't rely on a single model. Each model tells a different story. Use multiple models in the comparison view to understand the full picture before making budget decisions.
  • Start with Linear for a balanced baseline. Linear attribution gives every touchpoint equal credit, which is a fair starting point before you have enough data to justify a more opinionated model.
  • Use First-Touch to evaluate content and awareness channels. Blog posts, social content, and PR often initiate journeys but rarely close them. First-touch attribution ensures these efforts get recognized.
  • Use Position-Based for the best of both worlds. It credits both the channel that discovered the customer and the channel that closed the deal, while still acknowledging middle interactions.
  • Use Time-Decay for performance marketing. When optimizing paid channels, time-decay gives appropriate weight to the touchpoints closest to conversion without completely ignoring earlier interactions.
  • Ensure consistent UTM tagging. Attribution accuracy depends entirely on correct channel classification. A link tagged utm_medium=Social and another tagged utm_medium=social will be treated as two different channels.
  • Review attribution monthly. Channel dynamics shift as you change campaigns, creative, and targeting. Regular reviews keep your strategy aligned with reality.

Example Workflows

Evaluating a New Social Media Channel

  1. Launch a campaign on a new platform (e.g., Threads) with GrowQR links tagged utm_source=threads&utm_medium=social.
  2. After 30 days, open the Attribution report filtered to conversions where Threads appears as a touchpoint.
  3. Compare First-Touch and Last-Touch credit. If Threads has high first-touch but low last-touch credit, it's effective at introducing your brand but needs support from other channels to close.
  4. Decide whether to invest further based on the cost of the Threads campaign relative to attributed conversions.

Justifying Content Marketing Spend

  1. Generate an Attribution report for all conversions over the past quarter.
  2. Filter to touchpoints where utm_medium=content or utm_source=blog.
  3. Switch to First-Touch — note that content initiated 35% of all conversion journeys.
  4. Switch to Last-Touch — content only gets 8% of credit.
  5. Present both views to stakeholders to demonstrate that content marketing is a critical awareness driver, even though it rarely gets the last click.

Optimizing a Multi-Channel Campaign

  1. Create a campaign with links for email, paid search, social, and QR codes.
  2. After the campaign runs for two weeks, open the Attribution report filtered to this campaign.
  3. Use the Linear model to see which channels contributed the most conversions.
  4. Use the Channel Comparison Chart to identify channels that are over-indexed in one model versus another.
  5. Reallocate mid-campaign budget from the lowest-attributed channel to the highest-attributed one and measure the impact over the next two weeks.