> ## Documentation Index
> Fetch the complete documentation index at: https://docs.introw.io/llms.txt
> Use this file to discover all available pages before exploring further.

# Campaign Attribution

> See which partner campaigns drove clicks, signups and deals, and which campaign kits partners actually open, with every conversion credited to the partner in your CRM.

export const Headless = ({children, intro = true}) => {
  const [copied, setCopied] = useState(null);
  const copy = event => {
    const row = event.target.closest("li");
    if (!row) return;
    const text = row.textContent.trim();
    try {
      navigator.clipboard?.writeText(text);
    } catch {}
    setCopied(text);
    setTimeout(() => setCopied(null), 1600);
  };
  return <>
      {intro ? <p>
          Introw is <strong>headless</strong> by design: run everything here in plain language from Claude, ChatGPT,
          Slack, Teams, or your own CRM through Introw's <a href="/features/developer/mcp">MCP server</a>, with every
          action written straight back to your CRM source of truth. The portal is one surface, never the only one.
        </p> : null}

      {children ? <div className="not-prose" data-prompts="block">
          <div data-prompts="head">
            <span>{copied ? "Copied" : "Try it from your LLM"}</span>
          </div>
          <div data-prompts="rows" onClick={copy}>
            {children}
          </div>
          <a href="/headless/prompts" data-prompts="more">
            See all prompts
          </a>
        </div> : <Card title="See the headless motion" icon="wand-magic-sparkles" href="/headless">
          The agentic motion - lifecycle deep dives and a Claude Code skill library that run your partner program from
          Claude, ChatGPT, Slack, and your CRM.
        </Card>}
    </>;
};

export const Tour = ({children}) => {
  const [active, setActive] = useState(0);
  const wrappers = (Array.isArray(children) ? children : [children]).filter(c => c && c.props);
  const frames = wrappers.length === 1 && Array.isArray(wrappers[0].props.children) ? wrappers[0].props.children.filter(c => c && c.props) : [];
  if (frames.length < 2) {
    return <div className="not-prose" data-overview="tour">
        {children}
      </div>;
  }
  const thumb = (frame, index) => <button key={index} type="button" onClick={() => setActive(index)} aria-label={`Frame ${index + 1}`} data-active={index === active ? "true" : "false"} data-index={index + 1}>
      {frame}
    </button>;
  return <div className="not-prose" data-overview="tour">
      <div data-tour="hero">{frames[active] ?? frames[0]}</div>
      <div data-tour="strip">{frames.map((frame, index) => thumb(frame, index))}</div>
    </div>;
};

export const Impact = ({children}) => <div className="not-prose" data-overview="impact">
    {children}
  </div>;

export const Personas = ({children}) => <div className="not-prose" data-overview="personas">
    {children}
  </div>;

export const Pains = ({children}) => <div className="not-prose" data-overview="pains">
    {children}
  </div>;

> Partners run your campaign from their own tools.
> Campaign Attribution tells you what it produced: the clicks and signups each partner drove, and which kits they actually used.

## The problem it solves

A campaign that runs outside your tools usually runs outside your numbers too.

<Pains>
  | Without Introw | With Introw |
  | - | - |
  | Partner campaigns are a black box | Every click ties back to a partner |
  | Signups arrive with no partner on them | The partner is on the CRM record |
  | You guess which kit worked | You see which kits partners open |
  | Partners argue about credit | One signed link per partner |
</Pains>

## Impact

Partners keep running campaigns when the credit for them is automatic and visible.
That is the difference between a channel that sends you demand and one that sends you excuses.

<Impact>
  for your business

  * **In your CRM**
    Each conversion lands as a form submission with the partner attached, next to every other lead source in your CRM
  * **Trustworthy**
    Signed links, a window you set and one attribution model per campaign decide credit, so nobody settles it by hand at quarter end
  * **No new tool**
    Partners paste their link into the email or post they already send, and the tracking travels with it

  for your partners

  * **Self-serve**
    They find their own link and their own clicks, signups and earnings in the portal, without asking you
  * **Enabled**
    The kit already tells them where the link goes, so every call to action is tracked from the first send
  * **Efficient**
    One link per campaign works across email, LinkedIn and their website

  [A day in the life of your partners](/days-in-the-life)
</Impact>

<Personas>
  * **Partner Marketing** - proof of which campaigns and kits worked
  * **Partner Operations** - credit decided by rules, not by hand
  * **RevOps** - partner signups on the CRM record
  * **Head of Partnerships** - partner demand you can report upward
  * **Partner marketers** - their own link and their own numbers
</Personas>

## See it work

<Tour>
  * ![An affiliate campaign's Links tab, with one tracked link per partner and the clicks and conversions each one has recorded.](https://assets.introw.io/docs/features/tcma/attribution/guides/track-partner-campaign-attribution/steps/05.png)

    **One link per partner**

    Every click from a partner's campaign is tagged to that partner.

  * ![An affiliate campaign's Conversions tab, with clicks, conversions, the conversion rate and commission, and each conversion listed by partner.](https://assets.introw.io/docs/features/tcma/attribution/guides/track-partner-campaign-attribution/steps/07.png)

    **Clicks and sales**

    Sales come back per partner, written to your CRM through the form.

  * ![A report on the Assets data source grouped by Category, each campaign kit's bar split into downloads and views.](https://assets.introw.io/docs/features/tcma/attribution/guides/report-on-campaign-kit-usage/steps/07.png)

    **Usage per campaign**

    Views and downloads per kit, from one category on every asset.

  * ![The Q4 campaign kit folder's details: 38 views in total and a Total views column per asset, led by the campaign brief and the email sequence.](https://assets.introw.io/docs/features/tcma/attribution/guides/report-on-campaign-kit-usage/steps/12.png)

    **Who opened the kit**

    The kit folder adds up the views of every asset inside it.
</Tour>

## How it works

Campaign Attribution answers two questions about a through-channel campaign: what did it drive, and what did partners use to run it.
The first comes from affiliate links.
The second comes from asset engagement.

Every partner in an affiliate campaign gets one signed, tracked link that points at your destination page.
The partner puts that link in every call to action of the campaign they send from their own tool.
When a visitor clicks, Introw records the click against the partner, including any UTM parameters on the URL.
When that visitor converts within the attribution window you set, the conversion is credited by your attribution model, last click or first click.
Each conversion becomes a form submission on the campaign's conversion form, and that form's CRM automations write it into your CRM with the partner attached.
The campaign can pay the partner a fixed amount per conversion or follow a commission plan.

Kit usage comes from the content side.
Every view and download of a kit asset is recorded against the partner contact and the partner.
You read it per asset on its Engagement tab, or across the program in a report on the Assets data source.
Tag every asset in a kit with one category, for example the campaign name, and the report groups usage per campaign.
Asset reports group by asset, partner contact, file type, category and interaction, and by anything on the partner: tier, phase, partner manager, or a CRM company property such as country or region.

Deals the campaign creates further down the line are covered by [Campaign Registration & ROI](/features/tcma/campaign-roi), which links registered deals back to the campaign record.

```mermaid theme={"theme":{"light":"github-light","dark":"github-dark"}}
flowchart LR
  kit["Campaign kit"] --> send["Partner sends from own tool"]
  send --> click["Tracked link click"]
  click --> conversion["Credited conversion"]
  conversion --> crm["Form submission in CRM"]
  kit --> usage["Kit views and downloads"]
  usage --> report["Assets report by category"]
```

## Run it from your AI assistant

<Headless>
  * Which partners viewed or downloaded the Q4 campaign kit this month?
  * Show the partner activity for Apple in the last 30 days, including asset views.
  * Which form submissions came in from partners this week?
</Headless>

## Going deeper

<CardGroup cols={2}>
  <Card title="How to" icon="screwdriver-wrench" href="./technical">
    Setup, configuration, and all how-to guides.
  </Card>

  <Card title="API reference" icon="code" href="/general/introduction">
    Endpoints and code.
  </Card>
</CardGroup>

**Works with**

<CardGroup cols={2}>
  <Card title="Campaign Registration & ROI" icon="bullhorn" href="/features/tcma/campaign-roi">
    Attribution covers the clicks, ROI covers the deals the campaign produced.
  </Card>

  <Card title="Campaign Kits" icon="bullhorn" href="/features/tcma/campaign-kits">
    Usage reports read the kits you publish.
  </Card>

  <Card title="Links & Attribution" icon="share-nodes" href="/features/affiliate/links-attribution">
    Every partner launches with their own tracked link.
  </Card>

  <Card title="Conversion Tracking" icon="share-nodes" href="/features/affiliate/conversion-tracking">
    Signups on your site become credited conversions.
  </Card>

  <Card title="Report Builder" icon="chart-line" href="/features/reporting/report-builder">
    Report on kit usage by asset, category and partner.
  </Card>
</CardGroup>


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.