# Lens Marketing Attribution

> As of: 2026-05-17

- Skill: `ferroxlabs/lens-marketing-attribution` (Agent Skill, multi-file: 2 files)
- Install (CLI): `npx skillmds@latest add ferroxlabs/lens-marketing-attribution`
- Raw SKILL.md: https://api.skillmd.com/api/skills/ferroxlabs/lens-marketing-attribution/raw
- Safety review: pending
- Works with: Claude Code, Claude.ai, OpenAI Codex
- Category: Marketing & Growth
- Author: FerroxLabs (https://skillmd.com/u/ferroxlabs)
- Updated: 2026-09-17
- Page: https://skillmd.com/skills/ferroxlabs/lens-marketing-attribution

---


As of: 2026-05-17

# marketing-attribution

**Mode skill.** Toggled on the Analyst when the question is "which channel gets credit."

## When to use

Use when the user asks "which channel is working," "what should we cut," "is paid social pulling its weight," "what's our ROAS by channel," or hands you a dashboard showing each channel claiming the same conversion. Use before any budget reallocation. If the question is "why are conversions down," route back to funnel-diagnosis — attribution sits downstream of a working funnel.

Trigger phrases:

- "What's working?"
- "Should we cut paid social?"
- "Meta says 200 conversions, GA4 says 60. Which is right?"
- "How do we measure brand?"
- "What's the real ROAS?"

## Procedure

**1. Count conversions in the window.** Below 100 conversions, refuse to assign attribution. You have *signal* — proof a channel produces something — not *attribution*, which needs volume to distinguish contribution from noise. State the number, the floor, and the date the floor hits at current run-rate.

**2. Pick the model that matches the question.** Four common models, each answers a different question:

- **Last-click** — credits the final touch. Honest about closing channels (branded search, direct, retargeting). Lies about everything upstream. Use when asking "what closes."
- **First-click** — credits the channel that opened the journey. Honest about discovery channels (organic, paid social, podcasts, PR). Lies about retention and closing. Use when asking "what introduces us."
- **Linear** — splits credit evenly across touchpoints. Honest about multi-touch journeys. Lies about which touch did the work. Use when asking "how many touches before purchase."
- **Time-decay** — weights recent touches heavier. Honest about momentum. Lies about top-of-funnel patience. Use when the cycle is days, not months.

**3. Name what the chosen model under-credits.** Every model misses something. State it explicitly. Last-click systematically under-funds brand, organic, and discovery. First-click under-funds retention and conversion optimization. Linear and time-decay sit between, missing less of either extreme but adding their own distortions.

**4. Read each platform's number as the platform's case for itself.** Meta counts any user who saw or clicked a Meta ad within 7 days. Google Ads does the same. Shopify defaults to last-non-direct-click. GA4 uses data-driven attribution within observed sessions. These numbers sum to more than 100% of real conversions. Triangulate against one source-of-truth — the order or signup record with first-touch and last-touch UTMs captured at creation.

**5. For small-budget operators, run MMM-lite.** Full Marketing Mix Modeling needs a statistician. The lite version: hold every channel constant for two weeks, turn one off, measure the topline. Repeat per channel. Slow, low-tech, harder to fool than any dashboard. Works above the 100-conversion floor.

**6. Stamp it.** Write model used, window, total conversions, per-channel credit, and what the model under-credits to `TEAM_MEMORY.md` under `## Analyst`. Channel-budget decisions read from this, not from platform dashboards.

## Decision rules

- **No attribution under 100 conversions.** Below the floor, you are reading noise. Report direction, not credit.
- **Use two models, not one.** Run last-click and first-click in parallel. The gap is where under-credited work lives.
- **Never trust a platform's self-reported credit.** Every pixel claims credit it doesn't have alone. The sum across platforms always exceeds the real conversion count.
- **One window, one model, one source-of-truth.** Mixing produces numbers that look comparable but aren't.
- **Cut on triangulated evidence, not single-platform ROAS.** A channel that looks bad on last-click and good on first-click does discovery, not closing. Stage it; don't kill it.

## Anti-patterns

- Treating Meta's reported conversions as Meta's conversions. The pixel reports influence, not causality.
- Cutting a channel based on a 30-day last-click report when the sales cycle is 90 days. The decision precedes the data window.
- Switching models mid-quarter and reporting the swing as a real change. Methodology shifts are not performance shifts.
- Building a custom model to make the existing budget look right. Confirmation bias dressed as analysis.
- Running holdout tests on a channel during its seasonal peak. The test measures the season.

## Before / after

**Brief:** "Meta says 240 conversions last month at $35 CPA. Looks great. Double the budget?"

**Before:**
> *Yes — $35 CPA well under our $90 target. Scale Meta 2x next month.*

**After:**
> *Window: 30 days. Total conversions in order record: 310. Meta-reported: 240 (claims 77%). Google-reported: 180 (claims 58%). Sum across platforms: 560, well above 310 — every platform over-claims. Reading order-record UTMs: last-click Meta 95 (31%), last-click organic 110 (35%), last-click direct/branded 75 (24%). First-click Meta 160 (52%), first-click organic 85 (27%), first-click podcast 35 (11%). Diagnosis: Meta does discovery; organic and branded search close. Pure last-click under-credits Meta by ~65 conversions; pure first-click over-credits it. Recommendation: hold Meta budget one cycle, run a 2-week MMM-lite holdout to confirm causal contribution before scaling. Re-measure 2026-05-31.*

