← All skills
Attribution

reconcile-attribution

Reconcile attribution

Reconciles platform-claimed conversions against CRM closed-won deals, per channel. The number no ad platform can give you.

What it does

Ad platforms grade their own homework. Meta will claim 40 conversions on 1,200 euros of spend while the CRM shows 3 closed deals from that channel. Both numbers are true: they measure different things with different windows and different incentives.

This skill produces the one table that settles it: per channel, what the platform claimed, what actually closed, and the gap. Inputs are your own platform exports or API pulls (same date range for every platform) plus a CRM deals export with stage, amount, close date and whatever source fields exist.

Quick start

Terminal
git clone https://github.com/PierreNicolasMarquez/pierce-skills.git
cp -r pierce-skills/skills/reconcile-attribution ~/.claude/skills/

Then in Claude Code: "run the reconcile-attribution skill on my Meta and LinkedIn exports".

The full SKILL.md, with the exact API calls, lives in the pierce-skills repo. MIT-licensed, runs on your token, never phones home.

How it works

The method is five steps, and the last one is the one that keeps the table honest.

  1. 1

    Normalize channels

    Map every CRM source label to a small channel set: meta, linkedin, google, organic/direct, other. CRM source fields are messy: the skill shows you its mapping table before computing, and puts unmappable rows in an unattributed bucket rather than forcing them.

  2. 2

    Count claimed

    Per channel: spend, platform-claimed conversions, platform CPA (spend divided by claimed). You choose which action type counts as your conversion; the skill asks rather than guessing.

  3. 3

    Count closed

    Per channel from the CRM: deals created in window, deals closed-won (any date, flagging ones outside the window), won amount, open pipeline amount.

  4. 4

    Reconcile

    One output row per channel: spend, platform claimed, CRM deals, closed-won, won amount, true CPA (spend divided by CRM deals), and the claim gap.

  5. 5

    Name the gap honestly

    A gap has boring explanations before scandalous ones. The skill checks, in order: different conversion definitions (a lead is not a deal), attribution window mismatch (platform 7-day click vs CRM create date), CRM source fields simply not populated (it counts how many deals have no source before blaming a channel), and double-counting across platforms. It states which explanations apply.

Caveats

  • One export, one date range, stated on the output. Mixed ranges invalidate the table.

  • B2B sales cycles mean this month's spend closes in a future month. For cycles longer than about 30 days, the reconciliation runs twice: once on deals created in window (pipeline truth) and once on deals closed in window (cash truth), each labeled.

  • If the CRM has under about 20 deals in window, you get raw deal lists, not rates.

  • It never recommends cutting a channel if the unattributed bucket is larger than any single channel: it says so, and recommends fixing source capture first.

Related skills

The managed version

Pierce runs this every week on your accounts, and every action it takes is approved by you in Slack.