# Attribution — Marketing Skill for AI Agents

No single source is 'right,' and you should never sum conversions across platforms — if Google and Meta both claim the same sale, that's one conversion with two claimants, not two. Pick one source of truth for the conversion count (usually your CRM or backend, where revenue is real) and treat every other source as explaining where those conversions came from, not redefining how many. Each source is biased in a known direction: ad platforms over-count themselves via view-through, GA dumps the unknown into 'direct,' CRMs depend on human entry, and surveys favor the memorable touch. Read directional agreement over absolute match, use self-reported surveys and incrementality tests as tiebreakers, and expect an attribution gap you explain rather than eliminate.

> Maintained by Corey Haines · v1.0.0 · Updated 2026-07-22

Install: `npx skills add coreyhaines31/marketingskills`
Source: https://github.com/coreyhaines31/marketingskills/tree/main/skills/attribution

## When to use it

- "attribution,"
- "attribution model,"
- "first-touch vs last-touch,"
- "multi-touch,"
- "which channel drives revenue,"
- "what's my real CAC,"
- "my dashboards disagree,"
- "Google/Meta says X but GA says Y,"

## What's inside

**The playbook covers:** Boundaries — what this skill does NOT own, Pillar A — Interpretation, Pillar B — Own your attribution (first-party), Output format, The question, Source of truth, What each source says, Model comparison (for long cycles), Confidence & gaps, Recommendation, Tool Integrations

### Reference library

- [Attribution Models — The Math, Worked](https://github.com/coreyhaines31/marketingskills/blob/main/skills/attribution/references/attribution-models.md) — Six standard models, one journey scored six ways, and data-driven attribution explained without the black box. Use this when the user wants to understand *why* two models disagree, or needs to pick one defensibly.
- [Attribution by Business Type](https://github.com/coreyhaines31/marketingskills/blob/main/skills/attribution/references/by-business-type.md) — Attribution defaults differ sharply by business model. The same "which channel drives revenue?" question wants a different source of truth, model, and paradigm depending on how long your cycle is, how many people are involved, and where your budget goes. Two playbooks: B2B SaaS and Ecommerce/DTC. Match the user's product to one (or blend, for PLG-with-sales).
- [First-Party Attribution — The Own-Your-Attribution Runbook](https://github.com/coreyhaines31/marketingskills/blob/main/skills/attribution/references/first-party-tracking.md) — How to instrument and stitch attribution yourself when you control the site/app. This is the build track (Pillar B). It's distilled from real production builds and kept tool-agnostic — PostHog + SavvyCal are the worked example, but the pattern maps to any product-analytics tool with `identify()`/merge (Segment, Amplitude, GA4 user-id) and any third-party conversion domain with a metadata passthrough + webhook (Calendly, Cal.com, Stripe Checkout, Typeform).
- [Measurement Paradigms — MTA vs. MMM vs. Incrementality](https://github.com/coreyhaines31/marketingskills/blob/main/skills/attribution/references/measurement-paradigms.md) — Attribution *models* (see `attribution-models.md`) split credit *within* your tracked data. They can't tell you what would have happened anyway. That's what these three paradigms are for — increasingly rigorous, increasingly expensive ways to get closer to causality. Use this reference to help a user pick, and to explain how a test *reads* (not how to run the statistics).

## Key data

- The whole point: the touch that gets credit depends entirely on the model, and each model tells a different story about where your $12k came from.
- Long B2B cycle, clear created/closed moments** → position-based as the primary, first-touch + last-touch shown alongside.
- Use the B2B approach for the sales-assisted funnel (CRM as truth, position-based, pipeline-stage attribution, self-reported at demo).

## Example

**Prompt:** Google Ads says we got 50 conversions last month, Meta says 40, GA4 says 60, and our CRM shows 35 closed deals. Which one is right? I need to know our real numbers before I set next quarter's budget.

**Attribution readout (excerpt)**

# Attribution Readout — 2026-07

## Source of truth
CRM closed-won count (35). Platforms explain where these came from; they do not redefine how many.

## What each source says (de-duped, not summed)
| Channel     | Platform | GA4 | CRM | Self-reported | Our read |
|-------------|----------|-----|-----|---------------|----------|
| Paid search | 50       | 22  | 14  | 11            | Trending up |
| Paid social | 40       | 12  | 6   | 4             | Over-claimed (view-through) |
| Direct/branded | —     | 18  | 9   | —             | Top-of-funnel cashing out |
| Word of mouth | 0      | 0   | 3   | 12            | Invisible to tracking |

## Confidence & gaps
Platforms claim ~90; CRM verifies 35. Delta = over-claiming + view-through + dark social.

## Recommendation
Hold paid social flat and run a geo-holdout — high reported ROAS + flat revenue is the classic low-incrementality signature.

## FAQ

### Should I use first-touch or last-touch attribution?

For anything beyond a short, single-session purchase, don't report either in isolation — show first-touch and last-touch side by side, because the gap between them is the insight. First-touch over-credits awareness and ignores what closed the deal; last-touch over-credits branded search and direct and defunds the top of funnel. For B2B with clear 'created' and 'closed' moments, position-based (U-shaped) is a defensible primary, paired with self-reported attribution at demo or signup.

### Why is half my traffic showing up as 'direct'?

Direct is the junk drawer, not a channel. It captures bookmarks and typed URLs but mostly stripped referrers, dark social (DMs, Slack, podcasts), app-to-web handoffs, and any touch your tracking dropped. A large direct share usually means your top of funnel is working but under-measured — segment branded vs. non-branded search and run a 'how did you hear about us?' survey to surface the demand-creating channels behind it.

### My Meta campaign shows 6x ROAS but revenue isn't growing — why?

Platform-reported ROAS is systematically inflated by self-crediting, view-through conversions, and generous attribution windows, and reported ROAS is not incremental ROAS. Retargeting especially claims conversions that would have happened anyway. High reported ROAS alongside flat revenue is the classic signature of low incrementality. Run a holdout test — withhold the campaign from a random percentage or geo and measure the lift — and let incremental CPA, not reported ROAS, drive budget.

---
Canonical: https://marketing-skills.com/skills/attribution