> ## Documentation Index
> Fetch the complete documentation index at: https://docs.datalyr.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Attribution Models

> How DATALYR attributes conversions to marketing touchpoints

Attribution models determine which marketing touchpoints get credit for conversions. DATALYR uses session-based attribution with first-touch and last-touch tracking to give you complete visibility into customer journeys.

## How Attribution Works

When a user converts (makes a purchase, signs up, etc.), DATALYR attributes the conversion to marketing sources based on their journey:

**Example Journey:**

```
Day 1, 10:00 AM - User clicks Facebook ad (fbclid captured)
Day 1, 10:05 AM - Views product page (anonymous)
Day 1, 10:10 AM - Leaves site

Day 3, 2:00 PM - Googles brand name (organic search)
Day 3, 2:05 PM - Returns to site, creates account (identified)
Day 3, 2:10 PM - Browses catalog

Day 7, 8:00 AM - Types URL directly (direct traffic)
Day 7, 8:05 AM - Completes purchase
```

**Attribution Question:**
Which marketing source should get credit for the \$99 purchase?

* Facebook ad (Day 1)?
* Google organic search (Day 3)?
* Direct traffic (Day 7)?

Different attribution models answer this differently.

## Session-Based Attribution

DATALYR tracks attribution at the **session level**, not the page level.

### What is a Session

A session is a continuous period of user activity:

* **Starts:** First page view or after 30 minutes of inactivity
* **Duration:** Continues while user is active (clicks, scrolls, navigates)
* **Ends:** 30 minutes of inactivity or browser close

**Session Attribution Capture:**
When a new session starts, DATALYR captures:

* UTM parameters (utm\_source, utm\_medium, utm\_campaign)
* Click IDs (fbclid, gclid, ttclid)
* Referrer (where user came from)
* Landing page (first page of session)
* Source and medium (computed from above)

**Important:** Attribution data persists for the entire session and is attached to all events in that session.

### Session Example

**Session 1 (Facebook Ad Click):**

```javascript theme={null}
{
  "session_id": "sess_1727634645123_a1b2c3d4",
  "utm_source": "facebook",
  "utm_medium": "cpc",
  "utm_campaign": "summer_sale",
  "fbclid": "IwAR...",
  "source": "facebook",
  "medium": "cpc",
  "landing_page": "https://example.com/products?utm_source=facebook",
  "session_start": "2025-09-29T10:00:00Z"
}
```

All events in this session are attributed to Facebook.

**Session 2 (Google Search - 3 days later):**

```javascript theme={null}
{
  "session_id": "sess_1727894845123_e5f6g7h8",
  "utm_source": null,
  "fbclid": null,
  "referrer": "https://google.com/search?q=example+store",
  "source": "google",
  "medium": "organic",
  "landing_page": "https://example.com/",
  "session_start": "2025-10-02T14:00:00Z"
}
```

All events in this session are attributed to Google Organic.

## Attribution Models

DATALYR provides multiple attribution models:

### First-Touch Attribution

Credits the **first touchpoint** in the customer journey.

**Journey:**

```
Day 1: Facebook Ad (fbclid) → Product viewed
Day 3: Google Search → Returned to site
Day 7: Direct → Purchase ($99)
```

**First-Touch Result:**

* **Facebook Ad** gets 100% credit
* Purchase attributed to: `source: facebook`, `medium: cpc`

**When to Use:**

* Measure top-of-funnel performance
* Understand initial discovery channels
* Optimize awareness campaigns
* Evaluate new customer acquisition sources

**In DATALYR:**

```json theme={null}
{
  "first_touch_source": "facebook",
  "first_touch_medium": "cpc",
  "first_touch_campaign": "summer_sale",
  "first_touch_timestamp": 1727634645123,
  "days_since_first_touch": 7
}
```

### Last-Touch Attribution

Credits the **last touchpoint** before conversion.

**Journey:**

```
Day 1: Facebook Ad → Product viewed
Day 3: Google Search → Returned to site
Day 7: Direct → Purchase ($99)
```

**Last-Touch Result:**

* **Direct traffic** gets 100% credit
* Purchase attributed to: `source: direct`, `medium: direct`

**When to Use:**

* Measure bottom-of-funnel performance
* Understand closing channels
* Optimize conversion campaigns
* Evaluate retargeting effectiveness

**In DATALYR:**

```json theme={null}
{
  "last_touch_source": "direct",
  "last_touch_medium": "direct",
  "last_touch_timestamp": 1728239245123,
  "source": "direct",
  "medium": "direct"
}
```

### Session-Based (Current Touch)

Credits the **session where the conversion happened**.

**Journey:**

```
Session 1: Facebook Ad → Browsed products
Session 2: Google Search → Signed up
Session 3: Direct → Purchased ($99)
```

**Session-Based Result:**

* **Direct traffic** (Session 3) gets credit
* Same as last-touch in most cases

**When to Use:**

* Accurate session tracking
* Real-time conversion analysis
* Understanding immediate conversion drivers

**In DATALYR:**
Every event includes the session's attribution data automatically.

### Hybrid (DATALYR Default)

DATALYR tracks **both first-touch and last-touch** simultaneously, giving you flexibility in analysis.

**Every Conversion Event Includes:**

```json theme={null}
{
  "event_name": "purchase",
  "revenue": 99.99,

  // First-touch attribution
  "first_touch_source": "facebook",
  "first_touch_medium": "cpc",
  "first_touch_campaign": "summer_sale",
  "first_touch_timestamp": 1727634645123,

  // Last-touch attribution (current session)
  "source": "direct",
  "medium": "direct",
  "utm_source": null,
  "utm_campaign": null,

  // Journey metrics
  "touchpoint_count": 3,
  "days_since_first_touch": 7,
  "session_duration": 180000
}
```

**Benefits:**

* View conversions from multiple perspectives
* Compare acquisition vs. closing channels
* Build custom attribution models
* Understand full customer journey

## Click ID Attribution

DATALYR uses click IDs for accurate cross-device attribution.

### What are Click IDs

Click IDs are unique identifiers appended to ad URLs by platforms:

* **fbclid** (Facebook): `?fbclid=IwAR...`
* **gclid** (Google): `?gclid=Cj0KCQ...`
* **ttclid** (TikTok): `?ttclid=123...`
* **li\_fat\_id** (LinkedIn): `?li_fat_id=456...`
* **epik** (Pinterest): `?epik=789...`

### Click ID Tracking

When a user clicks an ad, DATALYR:

1. Captures click ID from URL
2. Stores in anonymous visitor profile
3. Links to user ID when they identify (login/signup)
4. Attributes conversion even on different device

**Cross-Device Example:**

**Mobile (Day 1):**

```
User clicks Facebook ad on phone
URL: https://example.com/?fbclid=IwAR123
DATALYR captures: fbclid → anon_mobile_abc
```

**Desktop (Day 7):**

```
User purchases on desktop
User ID: user_456
DATALYR links: anon_mobile_abc → user_456
Finds: fbclid from Day 1
Attributes purchase to Facebook
```

**Result:** Purchase correctly attributed to Facebook ad from 7 days ago on different device.

## Attribution Windows

Attribution windows determine how far back to look for attribution data.

### Default Windows

**DATALYR Default:**

* **30-day attribution window** for all click IDs and UTM parameters
* Configurable per workspace

**Platform-Specific:**

* **Meta Ads:** 7-day click, 1-day view (platform default)
* **Google Ads:** 30-day click, 1-day view (platform default)
* **TikTok Ads:** 28-day click, 1-day view (platform default)

### How Windows Work

**Example: 30-Day Window**

```
Day 1: User clicks Facebook ad (fbclid captured)
Day 10: User signs up (identified)
Day 20: User browses (engaged)
Day 35: User purchases

Result: NOT attributed to Facebook (outside 30-day window)
```

**Example: Within Window**

```
Day 1: User clicks Facebook ad (fbclid captured)
Day 10: User signs up (identified)
Day 20: User browses (engaged)
Day 25: User purchases

Result: Attributed to Facebook (within 30-day window)
```

### Configuring Windows

Attribution windows can be customized in workspace settings:

```javascript theme={null}
// DATALYR automatically respects configured attribution window
{
  "attribution_window_days": 30, // Default
  "respect_platform_windows": true // Respect Meta/Google defaults
}
```

## UTM Parameter Attribution

UTM parameters provide detailed campaign attribution.

### Standard UTM Parameters

**Format:**

```
https://example.com/?utm_source=facebook&utm_medium=cpc&utm_campaign=summer_sale&utm_term=wireless+headphones&utm_content=carousel_ad
```

**Parameters:**

* `utm_source`: Traffic source (facebook, google, newsletter)
* `utm_medium`: Marketing medium (cpc, email, social)
* `utm_campaign`: Campaign name (summer\_sale, black\_friday)
* `utm_term`: Keyword (for paid search)
* `utm_content`: Ad variation (carousel\_ad, video\_ad)

### UTM Attribution Priority

DATALYR uses this priority for source/medium:

**Priority 1: UTM Parameters**

```
?utm_source=facebook&utm_medium=cpc
→ source: facebook, medium: cpc
```

**Priority 2: Click IDs**

```
?fbclid=IwAR...
→ source: facebook, medium: cpc
```

**Priority 3: Referrer**

```
referrer: https://google.com/search
→ source: google, medium: organic
```

**Priority 4: Direct**

```
No UTM, click ID, or referrer
→ source: direct, medium: direct
```

## Source and Medium Classification

DATALYR automatically computes source and medium from available data.

### Computed Source

**From Click IDs:**

* `fbclid` → `facebook`
* `gclid` → `google`
* `ttclid` → `tiktok`
* `li_fat_id` → `linkedin`
* `epik` → `pinterest`

**From Referrer:**

* `google.com` → `google`
* `facebook.com` → `facebook`
* `youtube.com` → `youtube`
* `twitter.com` → `twitter`
* `linkedin.com` → `linkedin`

**AI Tools:**

* `chat.openai.com` → `chatgpt`
* `claude.ai` → `claude`
* `gemini.google.com` → `gemini`
* `grok.x.ai` → `grok`
* `perplexity.ai` → `perplexity`

### Computed Medium

**From Click IDs:**

* `fbclid`, `gclid`, `ttclid` → `cpc` (cost per click)

**From Referrer:**

* Search engines → `organic`
* Social media → `social`
* Same domain → `internal`
* No referrer → `direct`

## Journey Tracking

DATALYR tracks the complete customer journey across sessions.

### Journey Data

Every event includes:

```json theme={null}
{
  "touchpoint_count": 5,           // Total sessions
  "days_since_first_touch": 14,    // Days since first visit
  "session_duration": 240000,      // Current session duration (ms)
  "session_page_views": 8,         // Pages viewed this session
  "session_events": 45             // Events fired this session
}
```

### Journey Array

DATALYR stores a journey array in localStorage:

```json theme={null}
[
  {
    "source": "facebook",
    "medium": "cpc",
    "timestamp": 1727634645123,
    "landing_page": "/products"
  },
  {
    "source": "google",
    "medium": "organic",
    "timestamp": 1727808445123,
    "landing_page": "/signup"
  },
  {
    "source": "direct",
    "medium": "direct",
    "timestamp": 1728239245123,
    "landing_page": "/checkout"
  }
]
```

This enables multi-touch attribution analysis.

## Platform-Specific Attribution

### Meta Ads (Facebook/Instagram)

**Data Captured:**

* `fbclid`: Facebook Click ID
* `_fbp`: Facebook Browser Pixel (first-party cookie)
* `_fbc`: Facebook Click cookie (contains fbclid)

**Attribution:**

* DATALYR sends conversions back to Meta with fbclid
* Meta attributes based on their 7-day click, 1-day view window
* Cross-device attribution via Meta's identity graph

### Google Ads

**Data Captured:**

* `gclid`: Google Click ID
* `_gcl_aw`: Google Ads conversion cookie
* `_gac`: Google Ads Click cookie

**Attribution:**

* DATALYR sends conversions to Google Ads API with gclid
* Google attributes based on their 30-day click, 1-day view window
* Cross-device via Google signed-in users

### TikTok Ads

**Data Captured:**

* `ttclid`: TikTok Click ID
* `_ttp`: TikTok Pixel cookie

**Attribution:**

* DATALYR sends conversions to TikTok Events API with ttclid
* TikTok attributes based on 28-day click, 1-day view window
* Cross-device via TikTok's identity resolution

## Attribution Best Practices

**Use UTM Parameters Consistently**

```javascript theme={null}
// Good - Consistent naming
utm_source=facebook&utm_medium=cpc&utm_campaign=summer_sale
utm_source=google&utm_medium=cpc&utm_campaign=summer_sale

// Bad - Inconsistent
utm_source=fb&utm_medium=paid&utm_campaign=Summer Sale 2024
utm_source=Facebook&utm_medium=cpc&utm_campaign=summer-sale
```

**Let Click IDs Flow**
Don't strip click IDs from URLs. They're essential for attribution:

```javascript theme={null}
// Good - Preserve click IDs
https://example.com/products?fbclid=IwAR...

// Bad - Stripped click ID
https://example.com/products
```

**Call identify() Early**
Link anonymous visitors to users ASAP for cross-device attribution:

```javascript theme={null}
// After signup
datalyr.identify(user.id, {
  email: user.email
});

// After login
datalyr.identify(user.id);
```

**Track Key Conversion Events**
Define clear conversion events for attribution:

```javascript theme={null}
datalyr.track('purchase', {
  order_id: 'ORDER_123',
  revenue: 99.99,
  currency: 'USD'
});

datalyr.track('signup', {
  user_id: 'user_456',
  plan: 'pro'
});
```

## Attribution Reports

DATALYR provides multiple views of attribution data:

**Dashboard:**

* First-touch attribution (acquisition channels)
* Last-touch attribution (conversion channels)
* Journey length distribution
* Source/medium breakdown

**Customer Journeys:**

* Visual timeline of touchpoints
* Source/medium for each session
* Conversion path analysis
* Time to convert

**Conversion Rules:**

* Attribute conversions from Shopify, Stripe, webhooks
* Link server-side conversions to marketing sources
* Retroactive attribution via user/email matching

## Troubleshooting Attribution

**Conversions Not Attributed?**

Check:

* Click IDs present in event data (fbclid, gclid, etc.)
* Attribution window not exceeded (default 30 days)
* User identified via `identify()` for cross-device
* UTM parameters captured in session

**Wrong Attribution Source?**

Verify:

* UTM parameters spelled correctly
* Click IDs not stripped from URL
* Referrer data available
* Session started correctly

**Missing Cross-Device Attribution?**

Ensure:

* `identify()` called on both devices with same user\_id
* User logged in after clicking ad
* Attribution window hasn't expired

## Next Steps

<CardGroup cols={2}>
  <Card title="Visitor Identification" icon="fingerprint" href="/understanding-data/visitor-identification">
    How DATALYR identifies visitors
  </Card>

  <Card title="Identity Calls" icon="user" href="/understanding-data/identity-calls">
    Link users across devices
  </Card>

  <Card title="Customer Journeys" icon="route" href="/features/customer-journeys">
    View complete customer paths
  </Card>

  <Card title="Conversion Rules" icon="arrows-turn-to-dots" href="/features/conversion-rules">
    Attribute server-side conversions
  </Card>
</CardGroup>

## Need Help?

Questions about attribution? Check our [troubleshooting guide](/troubleshooting/data-discrepancies) or contact support.
