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.
In this repository25 other files it gives its agents.
- agent-guardrailsSkill
- agent-observabilitySkill
- agent-rolloutSkill
- agent-scopingSkill
- ai-governanceSkill
- artifact-evalSkill
- context-portfolioSkill
- credit-and-cost-controlSkill
- data-hygieneSkill
- data-model-and-syncSkill
- enrichment-waterfallSkill
- eval-calibrationSkill
- eval-loopSkill
- eval-spec-authoringSkill
- gtm-systems-auditSkill
- icp-scoring-engineSkill
- lifecycle-and-routingSkill
- martech-stack-auditSkill
- ops-and-scale-osSkill
- reporting-architectureSkill
- signal-pipelineSkill
- skill-authoringSkill
- tam-and-sourcingSkill
- warehouse-and-pipesSkill
- writing-qualitySkill
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
- Distinctive: line 14
Before a campaign, to set the measurement
- Distinctive: line 57
When two reports disagree, the cause is almost never a technical fault.
≈ “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.
Files
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 fieldSelf-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 opportunitiesBelow 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 opportunitiesShowing 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-syncfor the field rules - Pairs with:
reporting-architecturefor the dictionary - See also:
docs/metrics.md,docs/field-notes.mdstory 5
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
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.

