Skip to content

Campaigns & attribution

A campaign is the why behind a commercial action — “Summer push 2026”, “Black Friday”, “the reseller promo”. It carries a name, a URL-safe code, an on/off switch and an optional start/end window, and nothing else: a campaign changes nothing a customer can see. The things that do change what customers get — issuing an entitlement, temporarily overriding a plan, granting an add-on — are the how, and each of them can be linked to the campaign it executes.

Every such link is recorded as a touch in the campaign’s attribution log. The Campaign performance page (Insights) rolls the touches up so you can answer the question campaigns exist for: which initiative brought the entitlements, the conversions, and the revenue?

How campaign attribution flows: four mechanics write touches into the attribution log; the first touch plus plan prices produce the revenue shown on the campaign performance report. Signup link Grant in portal or API Attach after the fact Plan override · add-on grant ?campaign=CODE at registration campaign picked at issuance Campaigns tab on the entitlement applied under a campaign Attribution log one touch per event: issuance · manual attach plan override · add-on grant First touch claims revenue earliest issuance/manual touch wins Plan prices money, or relative units Campaign performance issued · active · trials → converted MRR per currency · unattributed

Promotion touches (overrides, add-on grants) count as engagement — they never claim the revenue.

Each campaign has an immutable, URL-safe code (lowercase letters, digits, hyphens — summer-2026). Put it on any self-service sign-up link:

https://your-tenant.example.com/auth/Account/Register?campaign=summer-2026

The code is captured at registration and travels with the user through email confirmation, so the entitlements issued when they confirm are attributed to the campaign automatically — even when confirmation happens days later on another device. An unknown or switched-off code is ignored: a marketing tag never blocks a sign-up.

Links already shared cannot be updated, so the code cannot be changed after creation. Deleting a campaign keeps all attribution history; it only stops new touches.

One entitlement can be touched by any number of campaigns over its life — acquired under one, upgraded during another’s promo. Each event writes one touch:

Touch Written when
Issuance The entitlement is created with a campaign — from the portal dialog, the admin API, or a signup link.
Manual An operator attaches a campaign after the fact on the entitlement’s Campaigns tab.
Plan override A temporary plan override is applied under a campaign (promo pricing).
Add-on grant An add-on is granted under a campaign. Revoking the grant keeps the touch — the promotion still happened.

Revenue follows the first touch: an entitlement belongs to the campaign of its earliest issuance or manual touch, so no entitlement’s revenue is ever counted under two campaigns. Plan-override and add-on-grant touches are engagement signals — they show a campaign is driving upgrades, but they never claim the revenue.

The money itself comes from plan pricing: each plan can carry a monthly price and currency. Three states matter:

  • No price — the plan is unpriced. Its entitlements are counted and flagged separately, never silently treated as free.
  • 0 — free (trials, community plans).
  • Positive — paid; the currency is required.

Amounts are always reported per currency and never summed across currencies — a 50 EUR plan and an 80 USD plan stay two numbers.

A plan set can be priced in relative units instead of money: each plan gets a weight — Basic 1, Pro 3, Enterprise 10 — and no price at all. The report turns those into a share of the total, so you can see the plan mix and how revenue is spread across campaigns without putting real numbers into the system. Useful when pricing lives in your billing provider, is commercially sensitive, or is still being worked out.

Weights are not percentages, and that is deliberate: they need not add up to anything, so adding a plan never means re-typing the others, and “Enterprise is ten times Basic” stays easy to say. The same three states apply — no weight means the plan is unpriced, 0 means it captures nothing, above zero counts.

One plan set is one price list, so all its plans use the same kind of pricing; different plan sets can differ. If a report ends up covering both kinds, they are shown apart and labelled, because a weight and an amount are different units and must never be added.

Insights ▸ Campaign performance shows, per campaign and per selected period: entitlements issued (with a trend chart), how many are active right now, trials started and converted from that cohort, promotion touches, and the attributed monthly recurring revenue (MRR) per currency. Entitlements no campaign can claim appear under No campaign — a large unattributed bucket usually means grants are being issued without picking a campaign. A warning banner counts active entitlements on unpriced plans so missing prices are visible instead of silently shrinking the totals. Plans priced in relative units get their own ranked list, shown as a share of the total rather than an amount. The CSV export keeps one row per campaign and currency, and puts the relative figures in a separate block, so a spreadsheet can’t accidentally add euros to dollars — or weights to either.

  • Attributesentitlements, through touches.
  • Prices fromplans (a monthly price and currency, or a relative weight).
  • Executed by → issuance, plan overrides, add-on grants, and self-service sign-up links.