skills/marketing-growth/influencer-tracking/SKILL.md
Measure influencer campaign ROI by generating unique UTM links per creator, attributing sales, and reporting revenue against campaign spend
npx skillsauth add finsilabs/awesome-ecommerce-skills influencer-trackingInstall 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.
Influencer marketing drives significant revenue but is notoriously difficult to attribute because customers often see a post, leave the platform, and purchase days later through a direct or organic channel. The solution is using both UTM links (for web traffic) and unique discount codes (for purchase attribution) together — these two signals complement each other and provide reliable attribution across devices. Most of this setup requires no custom code.
Note: For full influencer campaign management (discovery, briefs, deliverables), see @influencer-marketplace-integration. This skill focuses purely on attribution and analytics.
Create a unique UTM link for every influencer and campaign combination. Use Google's Campaign URL Builder at ga-dev-tools.google.com/campaign-url-builder:
| UTM Parameter | Value | Example |
|--------------|-------|---------|
| utm_source | Social platform | instagram, tiktok, youtube |
| utm_medium | Always influencer | influencer |
| utm_campaign | Campaign name | spring-2026, black-friday |
| utm_content | Creator handle | janedoe, johndoe_fitness |
Example URL: yourstore.com/?utm_source=instagram&utm_medium=influencer&utm_campaign=spring-2026&utm_content=janedoe
Shorten the link for Instagram bio use: use Bitly or a custom short domain. Store the mapping between short URL and UTM parameters in a spreadsheet.
Important: give influencers the shortened link and instruct them to place it in their link-in-bio, not in the post caption (Instagram captions do not have clickable links).
Discount codes capture purchases that happen via direct/organic after the initial influencer visit — the UTM link alone misses these.
JANEDOE15 (creator handle + percentage)Pro tip: Use Shopify Flow (Plus) or an app like Glew to automatically tag orders using a specific discount code with the influencer's name — this makes attribution reporting easier.
JANEDOE15For all platforms, UTM tracking works through GA4 automatically:
Session medium = influencer to see all influencer-driven sessionsSession campaign as a secondary dimension to compare by campaignutm_content as a dimension to compare creator performanceSee influencer-attributed revenue:
utm_medium = influencerutm_content as a dimension to see revenue per creatorCombine UTM revenue (from GA4) and discount code revenue (from Shopify/WooCommerce) in a single tracking spreadsheet:
| Creator | Platform | Campaign | UTM Revenue | Code Revenue | Total Revenue | Cost | ROAS | |---------|---------|---------|------------|-------------|--------------|------|------| | @janedoe | Instagram | Spring 2026 | $840 | $1,200 | $2,040 | $500 | 4.1x | | @johndoe | TikTok | Spring 2026 | $320 | $680 | $1,000 | $300 | 3.3x |
ROAS calculation: Total Revenue ÷ Campaign Cost (flat fee + COGS of gifted product + commission paid)
Normalize by reach for fair comparison between micro and macro influencers:
Standard last-click UTM attribution in GA4 misses influencer impact. Capture first-touch UTM data server-side:
// On page load, store the first UTM touch in a session cookie
function captureFirstTouchUTM() {
const params = new URLSearchParams(window.location.search);
if (!params.get('utm_source')) return;
// Only store if no first-touch already captured this session
if (!sessionStorage.getItem('first_touch_utm')) {
sessionStorage.setItem('first_touch_utm', JSON.stringify({
utm_source: params.get('utm_source'),
utm_medium: params.get('utm_medium'),
utm_campaign: params.get('utm_campaign'),
utm_content: params.get('utm_content'),
landed_at: new Date().toISOString(),
}));
}
}
// At checkout, include first-touch UTM in the order metadata
// Store in your order database for reporting
utm_content for the influencer handle — this lets you compare performance by creator within a single campaign (e.g., 20 influencers in the same spring campaign)| Problem | Solution |
|---------|----------|
| Promo codes shared on coupon/deal sites | Add per-customer usage limit (1 per customer) and monitor daily usage velocity for spikes |
| UTM attribution lost when customer uses a different device | Supplement UTM tracking with promo codes as a device-agnostic signal |
| No way to compare micro-influencers vs. macro-influencers fairly | Calculate revenue per 1,000 followers (normalized RPM) to compare across follower counts |
| Influencer posts after campaign end date | Add a 7-day grace period to your code expiry; store first_attributed_order_at to detect late posts |
| GA4 shows organic instead of influencer for returning customers | Use first-touch attribution model in GA4 Explore or compare against discount code data |
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