skills/data-analytics/attribution-modeling/SKILL.md
Understand which marketing channels drive purchases by implementing multi-touch attribution models across UTM-tracked campaigns and channels
npx skillsauth add finsilabs/awesome-ecommerce-skills attribution-modelingInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
Attribution modeling determines which marketing touchpoints receive credit for a conversion, enabling informed decisions about where to allocate ad spend. Every ad platform (Meta, Google, TikTok) reports attribution using its own model — typically claiming 100% credit — which means the sum of all platform-reported revenue routinely exceeds your actual revenue.
This skill guides you through setting up first-party attribution on your platform, comparing attribution models side by side, and using dedicated attribution tools that do this automatically without building custom pipelines.
| Platform | Recommended Tool | Why | |----------|-----------------|-----| | Shopify | Triple Whale or Northbeam | Both built specifically for Shopify DTC brands; pull order data via API, de-duplicate cross-platform attribution, and show first-party blended ROAS | | Shopify (budget) | Shopify Analytics built-in attribution + UTM tracking | Free; shows last-click attribution by UTM source for all orders | | WooCommerce | Metorik + GA4 attribution | Metorik adds UTM tracking to WooCommerce orders; GA4 provides data-driven attribution model | | BigCommerce | Rockerbox or Northbeam | Both support BigCommerce via API integration; provide multi-touch attribution dashboards | | All platforms (mid-market) | Rockerbox or Affluent | Platform-agnostic; pull ad spend from all channels and match to first-party order data | | Custom / Headless | Build on Segment + dbt or use Triple Whale's pixel API | Capture touchpoints with Segment, store in warehouse, model attribution in dbt |
Good attribution starts with consistent UTM parameters. Without them, 40–60% of traffic appears as "direct" (dark traffic).
UTM naming conventions to enforce across your team:
| Parameter | Example | Rule |
|-----------|---------|-------|
| utm_source | google, meta, klaviyo | Always lowercase; never Google or GOOGLE |
| utm_medium | cpc, email, social | Standardized list; no custom variants |
| utm_campaign | spring-sale-2026 | Consistent format across platforms |
Platform-specific setup:
gclid automatically); also add UTM parameters under Campaign → Settings → Additional settings → Campaign URL optionsOption A: Built-in Shopify Analytics (last-click, free)
Option B: Triple Whale (recommended for DTC brands spending $50K+/mo on ads)
Option C: Polar Analytics (mid-market, more affordable)
Using Metorik + GA4
Alternative: WooCommerce Google Analytics plugin (free)
For headless storefronts, capture touchpoints server-side and store them with orders. Then model attribution in a data warehouse:
Step 1 — Capture UTM touchpoints on every visit:
// Client-side: capture and store UTM params in localStorage on every page load
function captureUTMTouchpoint() {
const params = new URLSearchParams(window.location.search);
if (!params.get('utm_source') && !params.get('gclid') && !params.get('fbclid')) return;
const touchpoints = JSON.parse(localStorage.getItem('utm_touchpoints') || '[]');
touchpoints.push({
source: params.get('utm_source') ?? inferSource(document.referrer),
medium: params.get('utm_medium') ?? 'organic',
campaign: params.get('utm_campaign') ?? '(none)',
touchedAt: new Date().toISOString(),
landingPage: window.location.pathname,
});
// Keep last 10 touchpoints (30-day look-back)
localStorage.setItem('utm_touchpoints', JSON.stringify(touchpoints.slice(-10)));
}
Step 2 — Attach touchpoints to the order at checkout:
// Send stored touchpoints with the order creation request
const touchpoints = JSON.parse(localStorage.getItem('utm_touchpoints') || '[]');
await createOrder({ ...orderData, marketingTouchpoints: touchpoints });
Step 3 — Store and model attribution in your data warehouse:
Export to BigQuery or Snowflake via Fivetran or Stitch, then build attribution models in dbt. Use a dbt package like dbt-attribution or write your own last-click, linear, and time-decay models against your orders + touchpoints tables.
Run these comparisons monthly to guide budget decisions:
| What to compare | How to interpret | |-----------------|-----------------| | Platform ROAS vs. first-party ROAS | If platform ROAS is 5x but first-party is 2x, the channel is getting over-credited from view-through attribution | | Last-click vs. linear (all-touch) | Channels that appear stronger under linear are likely assisting conversions that get credited elsewhere under last-click | | First-touch vs. last-touch | First-touch shows which channels drive awareness; last-touch shows which channels close sales |
Rule of thumb: If Meta claims $200K in attributed revenue and Google claims $180K, but your total revenue was $250K, you have significant attribution overlap. Use a first-party tool (Triple Whale, Rockerbox) to de-duplicate and get a realistic picture.
utm_source=google and utm_source=Google are treated as different channels; enforce lowercase and a controlled vocabulary| Problem | Solution | |---------|----------| | Total platform-reported revenue exceeds actual revenue | This is expected — each platform claims 100% credit; use a first-party tool (Triple Whale, Rockerbox) to de-duplicate attribution | | 40-60% of orders show as "direct" or "none" | UTM parameters are missing from campaign links; audit your UTM setup in each ad platform; add UTMs to email footers and bio links | | UTM parameters stripped by redirect domains | Test your redirect URLs; some URL shorteners strip UTM params — use Google's URL builder and verify parameters survive | | Attribution shows email with very low credit | Email often appears late in conversion paths under last-click because customers come back via direct; check first-click model to see email's role in awareness | | iOS privacy changes reduced Meta attribution accuracy | Use Meta's Conversions API (CAPI) integration — Klaviyo and Triple Whale both support CAPI to send server-side conversion events back to Meta |
tools
Let shoppers save products to a wishlist, share it with friends, and get notified when saved items come back in stock or drop in price
development
Build a themeable storefront with design tokens and CSS custom properties that supports white-labeling, multi-brand variants, and dark mode
development
Speed up product discovery with instant search suggestions, fuzzy typo matching, and category-aware results powered by Algolia or Elasticsearch
development
Build a mobile-first storefront with thumb-friendly navigation, sticky add-to-cart buttons, and touch-optimized components for high mobile conversion