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.

Two Windows: Install vs Event

LinkForty has two independent attribution windows, both configurable per link:

WindowWhat it boundsField
Install attribution windowHow long a click stays eligible to match an installattributionWindowHours
Event (conversion) attribution windowHow long after the click an in-app event still attributes to the linkeventAttributionWindowHours

Everything above on this page describes the install window. The event window governs the down-funnel: once an install is attributed, how long do that install's subsequent in-app events (purchases, subscriptions, level-ups) keep counting toward the originating link?

Example: A user clicks a Black Friday link and installs the next day (within the install window). Three weeks later they make a purchase. Whether that purchase is credited to the Black Friday link depends on the event attribution window, not the install window.

Defaults and fallback

The event window resolves in this order:

  1. The link's own eventAttributionWindowHours, if set
  2. Otherwise the link's template default (defaultEventAttributionWindowHours)
  3. Otherwise the system default of 168 hours (7 days)

Unlike the install window, the event window is left unset (null) by default so the system default applies at read time. The same 1 to 2,160 hour range applies.

{
"title": "Subscription Campaign",
"attributionWindowHours": 168, // install must happen within 7 days of click
"eventAttributionWindowHours": 720 // events count for 30 days after the click
}

How it's applied

When App Analytics rolls up down-funnel events, each in-app event is included only if it occurred within the attributed link's event window of the original click. Events outside the window still exist in your data — they just aren't credited to that link's funnel. screen_view events from automatic screen tracking are excluded from this conversion rollup.

Match the event window to your monetization cycle

Set a longer event window (30–90 days) for apps where revenue arrives well after install — subscriptions, considered purchases, B2B. Keep it short for impulse-driven funnels where a late purchase probably wasn't driven by the original link.

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 WindowsFreeEnterprise onlyPaid plansOrg-level only
Granular Control1-2160 hoursFixed presetsFixed presetsFixed presets
Tier AvailabilityAll tiersEnterprisePaidEnterprise
API UpdatesInstantInstantDelayedSDK required
Bulk UpdatesYesYes (Enterprise)NoNo
Historical ChangesPlannedYesLimitedLimited
Template DefaultsYesYes (Enterprise)NoNo
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