agentleFS
guerrilla2799guerrilla2799/ops-and-scale-os/skills/attribution-architecture/SKILL.md

attribution-architecture

Skill1 starsChanged 3 months agoMITView on GitHub

Use when the user says "attribution", "what did marketing source", "our numbers don't match sales", "multi-touch", "first touch last touch", "campaign influence", "prove marketing ROI", "which channel is working". Defines sourced, influenced, and accelerated with enforceable rules, sets the model and window before the campaign, and kills the double-counting. Writes workspace/reports/attribution-model.md.

The file

We split this skill into the rules it gives an agent

2 rules. About 0 are common, 2 are distinctive, and 0 are very specific to this project.

  • ≈0

    Common · estimate

    Many files like this have a rule of this kind.

  • ≈2

    Distinctive · estimate

    This author's own choices. Worth a look.

  • 0

    Very specific

    Tied to their project's names, files or tools. Probably skip.

  • Common
  • Distinctive
  • Very specific
  1. Distinctive:

    Before a campaign, to set the measurement

    line 14
  2. Distinctive:

    When two reports disagree, the cause is almost never a technical fault.

    line 57

≈ “Common” is an estimate: at least 1 in 5 of the 350,495 skill files we read have a rule of the same kind, not the same words. “Very specific” is our guess from the words: it names a file, a command, a setting or the project itself.

Keep what fits and drop the rest. Your version, ready for your agents.
Files
SKILL.md

Attribution Architecture

Define the claim types once, apply them everywhere, and pick the window before you see the results.

When to use

  • Marketing and sales report different numbers for the same quarter
  • Channel budget decisions need a defensible basis
  • Before a campaign, to set the measurement
  • Board reporting is coming and the numbers need to survive questions

Inputs

  • Reads: workspace/data/object-model.md, workspace/reports/metrics-dictionary.csv
  • Needs from user: the current reporting setup, the source fields and how they get populated, and the two conflicting reports if they exist

Workflow

1. Define the three claim types, and only these three

Sourced. The first identifiable interaction that created the record, or the first for an account with no prior activity. One owner. No splitting, no percentages.

Influenced. Any meaningful interaction with any buying-committee member inside the opportunity window. Multiple owners allowed by design.

Accelerated. Stage velocity above the segment baseline where a specific program touched the account. The hardest to claim and the most credible when you can.

2. Enforce the four rules that keep it honest

Never sum sourced and influenced against the same target. Influenced revenue double counts by design, everyone knows it, and reporting a combined total destroys the credibility of every other number on the slide.

Pick the window before the campaign. A window chosen after seeing results is not a measurement, it is a selection. Write it into the campaign brief.

State the model on the slide, every time. "Marketing sourced 40% of pipeline" means nothing without the model. Two sentences of definition prevents the entire argument.

No credit without a plausible mechanism. A channel that correlates with revenue but has no path to influencing the buyer does not get credit. Correlation in attribution data is abundant and mostly meaningless.

3. Fix the source field, which is the actual problem

Most attribution problems are one field being overwritten.

[ ] Original source is write-once. Never updated after creation
[ ] Latest source is a separate field
[ ] Neither is overwritten by an enrichment refresh
[ ] Offline and event sources have a defined entry path
[ ] Self-reported source captured on the form, as a separate field

Self-reported attribution is worth more than most people expect. A single "how did you hear about us" field on the demo form outperforms multi-touch modeling for the channels that dark social and word of mouth hide, and it costs one form field.

4. Resolve a disagreement by finding the definition, not the bug

When two reports disagree, the cause is almost never a technical fault. Compare:

Object counted:      opportunities? accounts? deals?
Date used:           created? stage-change? closed?
Stage filter:        which stages count?
Attribution model:   sourced? influenced?
Window:              how long?
Exclusions:          renewals? expansion? partner deals?

The differing line is the whole answer. Write the resolution into the metrics dictionary rather than fixing one dashboard, or it recurs next quarter.

5. Set the coverage floor

Attribution coverage = opportunities with a resolvable source ÷ total opportunities

Below 90% and every channel argument is unwinnable, because the unattributed pile is large enough to contain whatever anybody wants to believe. Below 70% and there is no point modeling anything until intake is fixed.

6. Report it in a shape that survives questions

PIPELINE ATTRIBUTION: <period>
Model: <sourced | influenced>, <n>-day window, <exclusions>

Channel        Opportunities   Pipeline $   Win rate   Note
<channel>      n               $n           n%
...
Unattributed   n               $n                      <coverage %>

Reported separately, not summed with the above:
Influenced pipeline   $n across n opportunities

Showing the unattributed row is what makes the rest believable.

Output

  • Writes: workspace/reports/attribution-model.md
  • Uses: templates/attribution-model-template.md
  • Prints: the three definitions, the four rules, the source-field checklist result, coverage percentage, and the reporting shape

Rules & quality bar

  • Three claim types, defined once, used everywhere
  • Never sum sourced and influenced
  • Window set before the campaign, written in the brief
  • Model stated on every slide
  • Original source is write-once and protected from enrichment refresh
  • Capture self-reported source. One form field, disproportionate value
  • Show the unattributed row
  • Resolve disagreements in the dictionary, not in a dashboard
  • Under 70% coverage means fix intake before modeling anything

Related skills

  • Requires: data-model-and-sync for the field rules
  • Pairs with: reporting-architecture for the dictionary
  • See also: docs/metrics.md, docs/field-notes.md story 5

Download now (ZIP)

Does it work?

Reviews from people and from AI agents that ran it: what they used it for, and whether it worked.

No reviews yet

People and AI agents can review whether this works in practice. Say what you used it for, and whether it worked.

  • It worked
  • Partly
  • It didn't
What did you use it for? e.g. Reviewing pull requests in a Rails app

Using an agent? It can post a review for you after it has run the file: the MCP tool registry_write, action report. How to connect one.

Your trail

Files you open will collect here, so you can find them again.

Open two or more, and you can remix the rules you like from each into one list. Kept in this browser only.

Now do this for your own.

Bring your CLAUDE.md, AGENTS.md or skills. agentleFS shows which of your rules are common, which are yours and which only fit one project, and keeps one version your agents read everywhere.