ProcessingAttribution Engine

Attribution Engine

Signal’s attribution engine solves one of the most persistent problems in digital advertising: double-counting conversions. When a user clicks ads on multiple platforms before converting, every platform claims full credit for the sale, inflating your reported ROAS and distorting budget decisions.

The attribution engine evaluates touchpoints at conversion time and controls which ad platforms receive the conversion event, and with what value. All of this happens server-side, before events reach the delivery stage — no changes to your vendor blueprints are required.

The Problem: Double-Counting

Without attribution, if a user clicks a Meta ad on Monday, a Google ad on Tuesday, and converts on Wednesday, both Meta and Google report the full conversion value. A $100 purchase becomes $200 in reported revenue across your ad platforms.

This compounds across campaigns and channels, making it impossible to accurately assess which platforms are driving real value.

How It Works

The attribution engine operates in three stages:

1. Touchpoint Recording
   User clicks ad → click ID captured → stored against canonical identity

2. Attribution Evaluation (at conversion time)
   Conversion event arrives → engine looks up all touchpoints for the identity
   → applies the attribution model → assigns fractional credit to each platform

3. Delivery Adjustment
   Each ad platform receives the conversion event with its attributed share
   of the conversion value (or is suppressed entirely if it receives no credit)

Attribution runs after the Organisation Data Layer and before the Pipeline Transformation Engine. It only activates on events classified as conversions — all other events pass through unaffected.

Attribution Models

Signal supports five standard attribution models. You select a default model at the organisation level and can override it per integration.

ModelHow credit is distributed
Last Click100% credit to the last touchpoint before conversion
First Click100% credit to the first touchpoint
LinearCredit split equally across all touchpoints
Time DecayMore credit to touchpoints closer to the conversion, using exponential decay
Position-Based40% to first touchpoint, 40% to last, 20% split among middle touchpoints

Last Click is the default model and matches how most ad platforms self-report. Switching to a different model will cause your Signal-reported conversions to diverge from the platform’s own reporting — this is expected and is the point of server-side attribution.

Choosing a Model

  • Last Click is the simplest starting point and easiest to reconcile with platform-reported numbers.
  • Linear is useful when you want to understand the full journey without weighting any single touchpoint.
  • Time Decay suits businesses with shorter consideration cycles where recent touchpoints are more influential.
  • Position-Based balances discovery (first click) and closing (last click) while still crediting the middle of the funnel.

Custom Model Configuration

Beyond selecting a model, you can configure per-vendor overrides at the organisation level:

  • Value caps — set a maximum attributed value per conversion per vendor (e.g. never attribute more than $50 to a single Meta conversion)
  • Minimum thresholds — suppress delivery to a vendor if its attributed share falls below a minimum value or percentage (e.g. don’t send a conversion to TikTok if its share is less than 5%)

These overrides are stored in your organisation’s model library and can be edited in the Management UI.

Integration Classification

Not all integrations are subject to attribution. Signal classifies integrations into three categories:

CategoryAttribution appliedExamples
AdvertisingYesMeta CAPI, Google Ads, TikTok, Snapchat, Pinterest
AnalyticsNoGoogle Analytics 4, Amplitude, Mixpanel
Data WarehouseNoBigQuery, Snowflake, Redshift

Analytics and data warehouse integrations always receive the full, unmodified conversion value. Attribution only governs advertising integrations where double-counting is a concern.

Each integration’s category is set by its blueprint. You can see the classification on the integration detail page in the Management UI.

Touchpoint Tracking

The attribution engine tracks touchpoints by capturing click IDs from URL parameters when users arrive on your site. These click IDs are stored against the user’s canonical identity, creating a timeline of ad interactions.

How Click IDs Are Captured

  1. User clicks an ad and lands on your site with a click ID in the URL (e.g. ?gclid=abc123)
  2. Datafly.js captures the URL parameters and sends them with the page view event
  3. The ingestion gateway extracts recognised click IDs and records them as touchpoints
  4. Touchpoints are associated with the user’s canonical identity and stored with a timestamp

Supported Click IDs

ParameterVendorDescription
gclidGoogle AdsGoogle click identifier
gbraidGoogle AdsGoogle app campaign click identifier (iOS)
wbraidGoogle AdsGoogle web-to-app click identifier (iOS)
dclidGoogle (CM360)DoubleClick / Campaign Manager click identifier
fbclidMeta (Facebook/Instagram)Meta click identifier
ttclidTikTokTikTok click identifier
ScCidSnapchatSnapchat click identifier
epikPinterestPinterest click identifier
msclkidMicrosoft AdsMicrosoft Advertising click identifier
li_fat_idLinkedInLinkedIn first-party ad tracking identifier
twclidX (Twitter)X/Twitter click identifier
rdt_cidRedditReddit click identifier
⚠️

Click IDs have expiry windows that vary by vendor. For example, Google’s gclid is valid for 90 days. The attribution engine respects these windows and will not attribute conversions to expired touchpoints.

Configuration

Attribution is configured per organisation in the Management UI under Settings > Attribution.

Enabling Attribution

  1. Navigate to Settings > Attribution and enable the attribution engine
  2. Select your default attribution model
  3. Optionally configure per-vendor overrides (caps, minimums)

Once enabled, attribution automatically applies to all conversion events routed to advertising integrations.

Defining Conversion Events

The attribution engine needs to know which events are conversions. You define this under Settings > Attribution > Conversion Events by specifying which event names should trigger attribution evaluation (e.g. Purchase, Sign Up, Add Payment Info).

Events not listed as conversions pass through to all integrations with their full value, unaffected by attribution.

Edge Cases

No Touchpoints Found

When a conversion occurs but no ad click touchpoints exist for the user, the behaviour is configurable:

  • Deliver to all (default) — send the conversion to all advertising integrations with the full value (matches pre-attribution behaviour)
  • Suppress all — do not send the conversion to any advertising integration
  • Deliver to organic only — send the conversion only to analytics and data warehouse integrations

Same Vendor, Multiple Clicks

If a user clicks multiple ads on the same platform (e.g. two different Google Ads campaigns), the attribution engine treats each click as a separate touchpoint. The vendor receives a single conversion event with its total attributed share across all of its touchpoints.

Cross-Device Attribution

Because touchpoints are stored against the user’s canonical identity, attribution works across devices. If a user clicks an ad on mobile and converts on desktop, the touchpoint is still attributed — provided the identity graph has linked both sessions to the same canonical identity.

View-Through Conversions

The attribution engine is click-based only. View-through conversions (where a user saw but did not click an ad) are not tracked. Ad platforms that support view-through attribution will continue to self-report those conversions on their side.

What Gets Sent to Vendors

When attribution is active, the conversion value sent to each advertising integration is adjusted based on its attributed share. For example, with a Linear model and a $100 purchase across two touchpoints (Meta and Google):

  • Meta receives a conversion event with value = $50
  • Google receives a conversion event with value = $50
  • Your analytics integration (e.g. GA4) receives the full $100

The event structure and all other fields remain unchanged — only the conversion value is adjusted. Your blueprints do not need any modifications to work with attribution.

If a vendor’s attributed share is zero (or below the configured minimum threshold), the conversion event is suppressed entirely for that vendor.

Performance

The attribution engine adds minimal processing overhead. Touchpoint lookups are served from Redis, and attribution evaluation only runs on events classified as conversions. Non-conversion events (page views, identifies, custom events) bypass the attribution engine entirely.