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:
| Field | Source |
|---|---|
visitorId | Hash of IP address + User-Agent string (deterministic) |
urlId | The short link that was clicked |
campaignId | The campaign the link belongs to (if any) |
channel | Derived from utm_medium or defaults to "link" |
utmSource, utmMedium, utmCampaign, utmTerm, utmContent | From the link's UTM configuration |
referrer | The page the visitor clicked from |
deviceType | Parsed from User-Agent (desktop, mobile, tablet) |
country | GeoIP lookup |
ipAddress | Visitor's IP |
position | Sequential 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_vidcookie (1-year expiry) and sends it with everytrackConversion()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:
- Resolves the
visitorId(from the request body or IP+UA hash). - Retrieves all touchpoints for that
visitorIdwithin the goal's attribution window (default: 720 hours / 30 days). - Applies the configured attribution model to select or weight the touchpoints.
- Links the conversion to the attributed URL and campaign.
4. Model Application
The selected model distributes credit across the touchpoints:
| Model | How Credit Is Distributed | Best For |
|---|---|---|
| First-Touch | 100% credit to the earliest touchpoint | Measuring awareness and top-of-funnel effectiveness |
| Last-Touch | 100% credit to the most recent touchpoint | Measuring bottom-of-funnel and closing effectiveness |
| Linear | Equal credit to every touchpoint | A balanced view when all channels contribute equally |
| Time-Decay | More credit to touchpoints closer in time to the conversion | Valuing recency while still crediting earlier interactions |
| Position-Based | 40% to first touch, 40% to last touch, 20% split among middle touches | Crediting 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:
- Go to Dashboard → Conversions → Goals.
- Click a goal to edit it.
- Set the Attribution Model (default:
LAST_TOUCH). - Set the Attribution Window in hours (default: 720 hours = 30 days).
- 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_vidcookie provides a more reliablevisitorIdthan 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
- Select a date range for the conversions you want to analyze.
- Choose one or more conversion goals to include (e.g., only "Purchase" events).
- Select the attribution model(s) to apply.
- Optionally filter by campaign, tag, or channel.
- 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:
- Open the Attribution report with the Linear model for a balanced starting point.
- Note which channels have the highest attributed conversions relative to spend.
- Switch to First-Touch to see which channels are best at initiating new customer journeys.
- Switch to Last-Touch to see which channels close the deal.
- Switch to Position-Based for a compromise that credits both discovery and closing.
- 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=Socialand another taggedutm_medium=socialwill 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
- Launch a campaign on a new platform (e.g., Threads) with GrowQR links tagged
utm_source=threads&utm_medium=social. - After 30 days, open the Attribution report filtered to conversions where Threads appears as a touchpoint.
- 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.
- Decide whether to invest further based on the cost of the Threads campaign relative to attributed conversions.
Justifying Content Marketing Spend
- Generate an Attribution report for all conversions over the past quarter.
- Filter to touchpoints where
utm_medium=contentorutm_source=blog. - Switch to First-Touch — note that content initiated 35% of all conversion journeys.
- Switch to Last-Touch — content only gets 8% of credit.
- 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
- Create a campaign with links for email, paid search, social, and QR codes.
- After the campaign runs for two weeks, open the Attribution report filtered to this campaign.
- Use the Linear model to see which channels contributed the most conversions.
- Use the Channel Comparison Chart to identify channels that are over-indexed in one model versus another.
- Reallocate mid-campaign budget from the lowest-attributed channel to the highest-attributed one and measure the impact over the next two weeks.