skills/marketing-growth/marketing-attribution-dashboard/SKILL.md
Build multi-touch attribution dashboards tracking revenue by channel, campaign, and creative with blended ROAS analysis and budget allocation recommendations
npx skillsauth add finsilabs/awesome-ecommerce-skills marketing-attribution-dashboardInstall 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.
Every ecommerce business faces attribution chaos: Meta says it drove 300 purchases, Google says 280, and your order management system shows 400 total. The overlap is real, the methodologies differ, and single-touch last-click models misrepresent the true value of upper-funnel channels. A proper attribution dashboard aggregates all marketing data in one place and applies a consistent model so you can make defensible budget decisions. For most merchants, a third-party attribution tool — not custom code — is the fastest path to accurate channel ROI.
| Platform | Best For | Shopify | WooCommerce | BigCommerce | Price | |----------|---------|---------|-------------|-------------|-------| | Triple Whale | Shopify-native, real-time pixel + CAPI | App Store | Limited | Limited | $129+/mo | | Northbeam | Advanced multi-touch, TV/podcast spend | App Store | Via pixel | Via pixel | $500+/mo | | Rockerbox | Mid-market, all channels including offline | App Store | Via pixel | Via pixel | $500+/mo | | GA4 (free) | All platforms, good enough for most | Via tag | Via tag | Via tag | Free | | Wicked Reports | WooCommerce-native, integrates with Klaviyo | Limited | Plugin | Limited | $299+/mo |
Start with GA4 for most stores — it is free, handles multi-channel attribution with configurable models, and integrates natively with Google Ads. Upgrade to Triple Whale or Northbeam when you need real-time pixel data that survives iOS 14 restrictions.
With GA4 (recommended starting point):
G-XXXXXXXXXX)Session campaign to break down by campaignSession medium to isolate paid, organic, email, and socialWith Triple Whale (Shopify-native, recommended for paid social):
With GA4:
With Wicked Reports (WooCommerce-specific):
For headless stores, capture first-touch attribution server-side before building any reporting layer. Third-party tools like Triple Whale, Northbeam, or Rockerbox all provide a JavaScript pixel + server-side API for custom stacks.
If you need to build custom multi-touch attribution:
interface TouchpointEvent {
sessionId: string;
customerId?: string;
anonymousId: string;
channel: string; // 'paid-social' | 'paid-search' | 'organic' | 'email' | 'sms' | 'direct'
source: string; // 'meta' | 'google' | 'tiktok' | 'klaviyo'
medium: string;
campaign?: string;
orderId?: string;
orderValue?: number;
timestamp: Date;
}
function classifyChannel(utm: UtmParams, referrer?: string): string {
if (utm.medium === 'cpc' || utm.medium === 'paid') return 'paid-search';
if (utm.medium === 'paid-social' || utm.source?.match(/meta|facebook|instagram|tiktok/i)) return 'paid-social';
if (utm.medium === 'email') return 'email';
if (utm.medium === 'sms') return 'sms';
if (referrer?.match(/google|bing|yahoo/i)) return 'organic-search';
if (referrer && !referrer.includes(process.env.STORE_DOMAIN!)) return 'referral';
return 'direct';
}
// Attribution model: 40% first touch, 40% last touch, 20% distributed across middle
function positionBasedWeights(touchpoints: TouchpointEvent[]): number[] {
const n = touchpoints.length;
if (n === 1) return [1];
if (n === 2) return [0.5, 0.5];
const middleShare = 0.2 / (n - 2);
return touchpoints.map((_, i) => {
if (i === 0) return 0.4;
if (i === n - 1) return 0.4;
return middleShare;
});
}
Use a dedicated attribution API service like Rockerbox or Northbeam rather than building the full attribution engine from scratch — the complexity of cross-device stitching and model computation is not worth custom-building for most stores.
UTM parameters are the foundation of any attribution system. Without consistent UTMs, even GA4 cannot attribute sessions correctly.
Standard UTM structure:
| Channel | utm_source | utm_medium | utm_campaign |
|---------|-------------|-------------|----------------|
| Meta Ads | facebook or instagram | paid-social | spring-2026-prospecting |
| Google Ads | google | cpc | brand-search |
| TikTok Ads | tiktok | paid-social | ugc-spring-2026 |
| Klaviyo email | klaviyo | email | welcome-series |
| SMS | postscript | sms | abandoned-cart |
Use Google's Campaign URL Builder at ga-dev-tools.google.com/campaign-url-builder to generate UTM links consistently.
In Klaviyo: Go to Klaviyo → Account → Settings → UTM Tracking and enable auto-UTM tagging — Klaviyo appends UTM parameters to all email links automatically.
In Meta Ads: Go to Ads Manager → Campaign → URL Parameters and add utm_source={{site_source_name}}&utm_medium=paid-social&utm_campaign={{campaign.name}}&utm_content={{ad.name}} to your ad URL parameters at the campaign level.
Session medium contains paid to isolate paid channelsRevenue / Spend in a spreadsheetAutomate with Google Looker Studio (free):
| Metric | Target | Where to Find | |--------|--------|---------------| | Channel coverage (% of orders with UTM attribution) | > 70% | GA4 Acquisition report | | Email channel share of attributed revenue | Varies by business | GA4 filter by utm_medium=email | | Paid social EMQ score (for Meta CAPI) | 7+ / 10 | Meta Events Manager | | Cross-channel ROAS discrepancy | < 30% variance vs. platform-reported | Compare GA4 vs. Ads Manager |
| Problem | Solution | |---------|----------| | Direct traffic massively over-attributed | Set a 30-min session timeout in GA4; check for missing UTM parameters on all ad campaigns | | Email channel under-attributed | Enable auto-UTM in Klaviyo; test all links to verify UTMs survive ESP link tracking | | Platform ROAS looks great but profitability is flat | Platforms count view-through attribution; compare attribution windows — use 7-day click only | | Dashboard loads slowly | Use pre-aggregated GA4 summary tables; avoid building attribution from raw event exports |
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