Skip to main content

Attribution Windows

Attribution windows determine how long clicks remain valid for matching to app installs. LinkForty gives you per-link control that competitors charge thousands for.

What is an Attribution Window?

An attribution window is the time period during which a click can be matched to an app install.

Example Flow:

  1. Monday 10:00 AM - User clicks your short link

    • LinkForty creates device fingerprint
    • Stores click event with timestamp
  2. Wednesday 3:00 PM - User installs your app (65 hours later)

    • App opens and SDK initializes
    • SDK sends fingerprint to LinkForty
  3. Attribution Check

    • Time since click: 65 hours
    • Attribution window: 168 hours (7 days)
    • Result: ✅ Match found (65h < 168h)
  4. Deep Link Delivered

    • SDK receives original link parameters
    • App navigates user to specific content
    • Install attributed to your campaign

If the user had installed on Sunday (160 hours later), still within 168h window → ✅ Match

If the user had installed next Monday (168+ hours later), exceeds window → ❌ No match

Why Attribution Windows Matter

Conversion Rate Impact

Longer windows catch more installs but may reduce accuracy:

Window LengthTypical Match RateAccuracyBest For
1 hour5-10%Very HighImmediate actions
24 hours15-25%HighDirect response
7 days35-50%BalancedIndustry standard
30 days45-60%LowerBrand awareness
90 days50-70%LowestLong consideration

The Trade-off:

  • Shorter windows = Higher confidence in attribution, fewer matches
  • Longer windows = More matches, but some may be coincidental

Business Impact

E-commerce App (7-day window)

  • 1,000 clicks from Instagram ad
  • 350 installs within 7 days (35% conversion)
  • Cost: $500 ad spend
  • CPI: $1.43

Same campaign with 1-hour window:

  • 1,000 clicks
  • 75 installs within 1 hour (7.5% conversion)
  • Cost: $500 ad spend
  • CPI: $6.67 (looks way more expensive!)

Shorter windows under-report true performance. Longer windows may over-attribute.

LinkForty's Competitive Advantage

LinkForty: Configure attribution window for every individual link

{
"title": "Flash Sale - 24h Only",
"attributionWindowHours": 24,
"originalUrl": "https://example.com/flash-sale"
}

AppsFlyer: Organization-wide setting only. One size fits all campaigns.

Branch: Requires SDK changes to modify windows.

Impact: You can optimize each campaign independently.

Granular Control (1 to 2,160 Hours)

LinkForty: Any value from 1 hour to 90 days (2,160 hours)

{
"attributionWindowHours": 127 // Exactly 127 hours
}

AppsFlyer: Fixed presets (1, 3, 7, 14, 30 days)

Adjust: Fixed presets only (1, 7, 30 days)

Impact: Match your window to customer behavior patterns, not platform limitations.

Platform Availability

LinkForty:

  • Available on all tiers (Free, Pro, Self-hosted)
  • Full control over attribution windows
  • No restrictions or approvals needed

Other Platforms:

  • Often limited to enterprise tiers
  • May require account manager approval
  • Typically organization-wide settings only

Choosing the Right Window

Campaign Type Matrix

Campaign TypeRecommended WindowReasoning
Flash Sales1-24 hoursShort decision cycle, immediate action
Direct Response Ads24-72 hoursUsers install quickly or not at all
Product Launches7-14 daysNeed time for awareness to build
Content Marketing7-30 daysLonger consideration, education needed
Referral Programs30-90 daysFriend recommendations take time
Brand Awareness14-30 daysBuilding familiarity over time
Retargeting14-30 daysRe-engaging previous visitors
Influencer Campaigns7-14 daysAudience acts within days
Email Campaigns3-7 daysReaders act within week
SMS/Push1-6 hoursImmediate channel
Print/QR Codes7-30 daysOffline-to-online delay

Industry Benchmarks

IndustryTypical Decision CycleRecommended Window
Food DeliveryMinutes to hours1-24 hours
E-commerceHours to days3-7 days
Finance AppsDays to weeks7-30 days
Dating AppsHours to days24-72 hours
Productivity ToolsDays to weeks7-14 days
GamesMinutes to days24-72 hours
Health & FitnessDays to weeks7-30 days
Real EstateWeeks to months30-90 days
B2B SaaSWeeks to months30-90 days
TravelDays to weeks14-30 days

Platform Behavior Patterns

iOS Users:

  • Longer consideration time
  • More research before install
  • Recommended: +3-7 days vs Android

Android Users:

  • Faster install decisions
  • More impulsive downloads
  • Recommended: Shorter windows

Example:

// iOS link
{
"title": "iOS Campaign",
"iosUrl": "https://apps.apple.com/app/id123",
"attributionWindowHours": 336 // 14 days
}

// Android link
{
"title": "Android Campaign",
"androidUrl": "https://play.google.com/store/apps/details?id=com.app",
"attributionWindowHours": 168 // 7 days
}

Setting Attribution Windows

Via Dashboard

Creating New Link:

  1. Click "Create Link"
  2. Fill in basic details
  3. Find "Attribution Window" dropdown
  4. Select from presets:
    • 1 hour (privacy-focused)
    • 24 hours (direct response)
    • 72 hours (short campaigns)
    • 168 hours (7 days) ← Default
    • 336 hours (14 days)
    • 720 hours (30 days)
    • 2160 hours (90 days)
  5. Click "Create Link"

Editing Existing Link:

  1. Go to Links page
  2. Click link you want to edit
  3. Click "Edit" button
  4. Change "Attribution Window" value
  5. Click "Save"

Note: Changing attribution window applies to new clicks only. Existing fingerprints retain original window.

Via API

Creating Link with Custom Window:

curl -X POST https://api.linkforty.com/api/links \
-H "Authorization: Bearer $LINKFORTY_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"templateId": "550e8400-e29b-41d4-a716-446655440000",
"originalUrl": "https://example.com/product",
"attributionWindowHours": 336
}'

Updating Window:

curl -X PUT https://api.linkforty.com/api/links/abc123 \
-H "Authorization: Bearer $LINKFORTY_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"attributionWindowHours": 720
}'

Bulk Update:

curl -X POST https://api.linkforty.com/api/links/bulk-update \
-H "Authorization: Bearer $LINKFORTY_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"linkIds": [
"link_abc123",
"link_def456",
"link_ghi789"
],
"updates": {
"attributionWindowHours": 168
}
}'

Set default windows for all links from a template:

curl -X POST https://api.linkforty.com/api/templates \
-H "Authorization: Bearer $LINKFORTY_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"name": "Social Media Template",
"attributionWindowHours": 168,
"iosUrl": "https://apps.apple.com/app/id123",
"androidUrl": "https://play.google.com/store/apps/details?id=com.app"
}'

All links created from this template inherit 168-hour window (overridable).

Advanced Strategies

Dynamic Windows by Traffic Source

Different channels need different windows:

// Programmatic link creation
const ATTRIBUTION_WINDOWS = {
sms: 6, // 6 hours - immediate channel
push: 12, // 12 hours - notification urgency
email: 168, // 7 days - read at leisure
social: 168, // 7 days - discovery browsing
search: 72, // 3 days - high intent
display: 720, // 30 days - brand awareness
influencer: 336 // 14 days - trust building
};

function createCampaignLink(source, url) {
return fetch('https://api.linkforty.com/api/links', {
method: 'POST',
headers: {
'Authorization': `Bearer ${API_KEY}`,
'Content-Type': 'application/json'
},
body: JSON.stringify({
templateId: TEMPLATE_ID,
originalUrl: url,
attributionWindowHours: ATTRIBUTION_WINDOWS[source],
utmParameters: {
utm_source: source
}
})
});
}

A/B Testing Attribution Windows

Test different windows to optimize for your audience:

Test Setup:

// Variant A: Short window (high confidence)
{
"title": "Instagram Ad - Variant A",
"customCode": "insta-test-a",
"attributionWindowHours": 72,
"utmContent": "variant-a"
}

// Variant B: Long window (high volume)
{
"title": "Instagram Ad - Variant B",
"customCode": "insta-test-b",
"attributionWindowHours": 336,
"utmContent": "variant-b"
}

Analysis:

-- Compare conversion rates
SELECT
utm_content as variant,
COUNT(DISTINCT click_id) as clicks,
COUNT(DISTINCT CASE WHEN installed_at IS NOT NULL THEN user_id END) as installs,
ROUND(100.0 * COUNT(DISTINCT CASE WHEN installed_at IS NOT NULL THEN user_id END) /
COUNT(DISTINCT click_id), 2) as conversion_rate,
AVG(EXTRACT(EPOCH FROM (installed_at - clicked_at))/3600) as avg_time_to_install_hours
FROM click_events
WHERE utm_campaign = 'instagram-test'
GROUP BY utm_content;

Decision criteria:

  • If similar conversion rates → Use shorter window (higher confidence)
  • If significantly different → Use longer window (captures more value)
  • Monitor avg_time_to_install_hours to set optimal window

Seasonal Adjustments

Adjust windows based on seasonality:

function getSeasonalWindow(baseWindow) {
const month = new Date().getMonth();

// Holiday shopping (Nov-Dec): Users delay installs, shopping around
if (month >= 10) {
return baseWindow * 1.5; // +50% longer
}

// Summer (Jun-Aug): Faster decisions, vacation browsing
if (month >= 5 && month <= 7) {
return baseWindow * 0.75; // -25% shorter
}

// Back to school (Aug-Sep): Research-heavy
if (month >= 7 && month <= 8) {
return baseWindow * 1.25; // +25% longer
}

return baseWindow;
}

// Use: getSeasonalWindow(168) → 252 hours in November

Fraud Prevention with Short Windows

Prevent attribution fraud with aggressive windows:

Problem: Malicious actors click links, install later, claim referral rewards

Solution: Short windows reduce fraud window

{
"title": "Referral Program Link",
"attributionWindowHours": 24, // Must install within 24h
"utmSource": "referral"
}

Additional protection:

  • Require email verification before reward
  • Check fingerprint quality score
  • Validate IP address isn't VPN/proxy
  • Monitor for suspicious patterns

Monitoring Attribution Performance

Dashboard Analytics

View attribution metrics:

  1. Go to AnalyticsLinks
  2. Select your link
  3. View "Attribution Performance" section:
    • Total clicks
    • Attributed installs
    • Average time to install
    • Attribution rate (% of clicks that install)

Time-to-install distribution:

Time RangeInstallsPercentage
0-1 hours4515%
1-24 hours9030%
1-3 days7525%
3-7 days6020%
7-14 days3010%

Insight: 70% install within 24 hours → Could reduce window from 14 days to 3 days without losing much volume.

API Analytics

curl https://api.linkforty.com/api/analytics/links/abc123 \
-H "Authorization: Bearer $LINKFORTY_API_KEY"

Response:

{
"linkId": "abc123",
"totalClicks": 1000,
"attributedInstalls": 350,
"attributionRate": 0.35,
"avgTimeToInstallHours": 42.5,
"timeToInstallDistribution": {
"0-1h": 150,
"1-24h": 100,
"1-3d": 60,
"3-7d": 30,
"7-14d": 10
},
"attributionWindowHours": 168
}

Optimization Recommendations

If avgTimeToInstallHours is much less than attributionWindowHours:

avg: 42 hours
window: 336 hours (14 days)
→ Recommendation: Reduce window to 72 hours (saves server resources)

If many installs near end of window:

7-14d range: 30% of installs
window: 336 hours (14 days)
→ Recommendation: Increase window to 720 hours (30 days) to capture more

Comparison with Competitors

FeatureLinkFortyAppsFlyerBranchAdjust
Per-Link Windows✅ Free❌ Enterprise only✅ Paid plans❌ Org-level only
Granular Control✅ 1-2160 hours❌ Fixed presets❌ Fixed presets❌ Fixed presets
Tier AvailabilityAll tiersEnterprisePaidEnterprise
API Updates✅ Instant✅ Instant⚠️ Delayed⚠️ SDK required
Bulk Updates✅ Yes✅ Yes (Enterprise)❌ No❌ No
Historical Changes✅ Audit log✅ Yes⚠️ Limited⚠️ Limited
Template Defaults✅ Yes✅ Yes (Enterprise)❌ No❌ No
Window Range1h - 90d1d - 30d1d - 30d1d - 30d

Best Practices Summary

  1. Start with 7 days (168 hours) - Industry standard, balanced approach

  2. Match window to customer journey:

    • Impulse purchases → 24-72 hours
    • Considered purchases → 7-30 days
    • Enterprise/B2B → 30-90 days
  3. Monitor time-to-install metrics - Adjust windows based on actual behavior

  4. Use shorter windows for:

    • Fraud-prone campaigns (referrals)
    • Immediate action campaigns (flash sales)
    • Privacy-conscious users
  5. Use longer windows for:

    • Brand awareness campaigns
    • Expensive products (high consideration)
    • Referral programs (trust building)
  6. Platform-specific windows:

    • iOS: +3-7 days vs Android
    • Web: Shorter (users use mobile more)
  7. Test and optimize:

    • A/B test different windows
    • Analyze conversion rates vs confidence
    • Adjust based on data, not assumptions
  8. Template-based defaults:

    • Create templates for common use cases
    • Override for specific campaigns

Troubleshooting

Low Attribution Rates

Symptom: Very few installs attributed despite high click volume

Possible Causes:

  1. Attribution window too short

    • Solution: Increase window to 7-14 days
  2. Users installing much later than expected

    • Check analytics: "Time to Install Distribution"
    • Increase window to cover 80% of installs
  3. Fingerprint matching issues

Over-Attribution

Symptom: Attribution rate >70% seems unrealistic

Possible Causes:

  1. Attribution window too long

    • Solution: Reduce window to increase confidence
  2. Coincidental installs being attributed

    • Users may have discovered app elsewhere
    • Reduce window to 1-3 days for high-confidence only

Installs Not Being Attributed

Symptom: Users report installing from your link, but no attribution

Possible Causes:

  1. Installed after attribution window expired

    • Check clicked_at vs installed_at timestamps
    • Increase window if pattern detected
  2. SDK not initialized properly

  3. Different device/network for click vs install

    • Fingerprint won't match (expected behavior)
    • Consider device ID matching (requires SDK)

Next Steps

API Reference