Revenue Tracking
Activate Revenue at risk and Recoverable now in the Console by passing plan, planValue, and planCurrency to ARCYProvider.
ARCY computes two revenue figures in the Console from behavioral signals:
- Revenue at risk is the combined monthly value of the accounts ARCY has flagged as likely to churn.
- Recoverable now is the portion of that revenue where a proactive intervention is still viable.
Both figures need one input from you: the monthly value of each user or account, via the planValue trait. Until ARCY receives a session carrying planValue, the revenue cards stay locked and show a setup prompt instead of dollar figures. plan alone (a plan name string, with no planValue) does not activate the cards. In development, ARCYProvider prints a console warning naming the exact missing prop path (e.g. pass userTraits.planValue); the dashboard's Data Completeness panel shows the same thing after you ship.
planValue alone activates the cards, but ARCY's dev-mode diagnostic treats plan, planValue, and planCurrency as a set: pass all three together, or the console keeps warning you about the ones you left out. plan gives the Console a plan name to show alongside the number; planCurrency tells it which currency that number is in. An account with planValue but no planCurrency is excluded from the Revenue at Risk / Recoverable Now totals entirely, since ARCY can't safely combine that account's value into a portfolio-wide sum without knowing its currency, and no longer assumes USD for that purpose. Set planCurrency explicitly on every account you want counted.
Which side is authoritative: appType
Which trait object ARCY reads is driven by ARCYProvider's appType prop ("b2b" | "b2c" | "hybrid", defaults to "b2b"):
appType="b2c"— readsuserTraits.planValueonlyappType="b2b"(default) — readsorganizationTraits.planValueonlyappType="hybrid"— reads both independently and reports two separate figures, one per-user and one per-organization. They are never summed into a single number, since a hybrid app can genuinely bill at both levels.
How to activate
Add plan, planValue, and planCurrency to userTraits (for B2C products) or organizationTraits (for B2B products) on ARCYProvider. plan is the plan name, planValue is the current monthly value, and planCurrency is the ISO 4217 code that value is denominated in. All three are optional at the type level, so no operator is forced to provide them, but we recommend passing all three together: planValue without planCurrency is still recorded, but that account is left out of the portfolio-wide revenue totals (see Currency).
If you bill per seat (a fixed price per member of an organization), aggregate your own seat-level pricing into a single organizationTraits.planValue before passing it. ARCY does not sum userTraits.planValue across an organization's members into an account figure for you.
B2C example
For products billed per user, set the traits on userTraits:
<ARCYProvider
publicKey={process.env.NEXT_PUBLIC_ARCY_PUBLISHABLE_KEY || process.env.NEXT_PUBLIC_ARCY_TEST_PUBLISHABLE_KEY}
userTraits={{
userId: user.id,
plan: user.subscriptionPlan, // "Starter", "Pro", "Enterprise"
planValue: user.monthlyAmount, // 29, 99, 299
planCurrency: "USD" // ISO 4217 code, defaults to USD if omitted
}}
>
{children}
</ARCYProvider>B2B example
For products billed per account, set the traits on organizationTraits so revenue is tracked at the account level:
<ARCYProvider
publicKey={process.env.NEXT_PUBLIC_ARCY_PUBLISHABLE_KEY || process.env.NEXT_PUBLIC_ARCY_TEST_PUBLISHABLE_KEY}
userTraits={{ userId: user.id }}
organizationTraits={{
organizationId: org.id,
plan: org.subscriptionPlan,
planValue: org.monthlyAmount,
planCurrency: "TRY" // renders the account MRR in Turkish Lira
}}
>
{children}
</ARCYProvider>When it activates
The revenue cards in the Console activate once ARCY's insight job has processed at least one session with planValue set. This happens on the next scheduled insight job run after you ship the change. Before that, the cards show "Revenue tracking not set up" with a link back to the setup guide.
What planValue should be
planValue is the current monthly value of this user or account, in the currency declared by planCurrency. Pass the same number you use for billing. ARCY always uses the most recent value it receives, so when a user upgrades or downgrades, pass the new value and the next session updates it.
For B2B accounts, planValue on organizationTraits is the account MRR. If you set it on both userTraits and organizationTraits with appType="hybrid", ARCY reports both figures separately rather than merging them, as described above.
Currency
planCurrency is the ISO 4217 code that planValue is denominated in. It is optional at the type level, but we recommend setting it on every account: when set, every money figure for that user or account in the Console (Revenue at risk, Recoverable now, MRR, estimated ARR) renders with the matching currency symbol. When omitted, that account's own figures still render (assumed USD), but the account is excluded from the portfolio-wide Revenue at Risk / Recoverable Now totals rather than silently counted as USD, since ARCY does not assume a currency when combining accounts into one sum. The dashboard's Data Completeness panel flags accounts missing planCurrency so you know which ones to fix.
Supported values:
| Code | Currency | Code | Currency |
|---|---|---|---|
USD | US Dollar | AUD | Australian Dollar |
EUR | Euro | CAD | Canadian Dollar |
GBP | British Pound | CHF | Swiss Franc |
JPY | Japanese Yen | INR | Indian Rupee |
CNY | Chinese Yuan | TRY | Turkish Lira |
ARCY renders planValue in exactly the currency you declare. It does not convert between currencies and does not sum values that are denominated in different currencies into one figure. Keep a single currency per user or account.