Cross-Product Dashboard
| Account | Products | ARR__c | Combined revenue | Multi-product since |
|---|
| Account | Products | Opp amount | First interest |
|---|
| Account | Opportunity | Type | Stage | Products | Amount | Close date | Owner |
|---|
| Account | Started with | Then added | Gap | Revenue | Full journey |
|---|
Dashboard methodology
Data source
The Dashboard tab pulls from Salesforce Order records with status Paid or Activated, excluding reduction orders. The query covers all orders with an effective date from January 2021 onward.
Product detection uses the Account.Product__c field on each account. This is a semicolon-separated field maintained by Salesforce that lists which products the account currently has active subscriptions for.
Record_Type_Name__c field on orders is always "airSlate" (the org's record type) and is not used for product detection.Products tracked
| Product | Detection keywords | Description |
|---|---|---|
| airSlate | airslate | Workflow automation platform |
| altaFlow | altaflow | Salesforce-native document automation |
| DAH | dah | Document Automation Hub |
| signNow | signnow, sign now, signnow api, signnow vx | Electronic signature solution |
| pdfFiller | pdffiller, pdf filler, pdf editor, pdf editing, pdf tools | PDF editing and form filling |
| US Legal | us legal | US Legal product (part of Automation Suite bundle) |
Bundle products
Some Account.Product__c values represent bundles that already include multiple products. These are automatically expanded into their constituent products, so a single bundle entry qualifies the account as multi-product without needing additional field entries.
| Bundle name (field value) | Expands to |
|---|---|
airSlate Business Cloud | airSlate + signNow + pdfFiller |
signNow Business Cloud | signNow + pdfFiller |
airSlate Automation Suite | airSlate + signNow + pdfFiller + US Legal |
Business Cloud (no prefix) | airSlate + signNow + pdfFiller |
Multi-product definition
An account is counted as "multi-product" in a given quarter if it has active orders during that quarter AND its Account.Product__c field lists two or more distinct products from the table above.
Account.Product__c reflects the account's current product mix, not its historical state. If an account added signNow in 2025 but had only airSlate before, the dashboard will show them as multi-product in earlier quarters too. This inflates historical multi-product counts. Future improvement: use per-order product detection once order-level product fields are available.Fiscal calendar
| Quarter | Months |
|---|---|
| Q1 | January – March |
| Q2 | April – June |
| Q3 | July – September |
| Q4 | October – December |
The fiscal year follows the calendar year: Q1 FY26 = January–March 2026. The current in-progress quarter is included but marked as partial (greyed out in charts).
Revenue calculation
Annual Recurring Revenue per order is taken from the first non-zero value in this priority: Final_ARR__c, ARR__c, Annual_Recurring_Value__c. The highest ARR across all orders for a given product on an account is used.
Multi-product revenue for a quarter sums the revenue across all products for accounts that are multi-product in that quarter. Yearly revenue (shown in the KPI when selecting a fiscal year) sums quarterly revenue across all quarters in that year.
Churn definition
Churned: An account that was multi-product in the previous quarter but is no longer multi-product in the current quarter. This can happen if an order expires, a product subscription lapses, or the account's product field changes.
New multi-product: An account that was not multi-product in the previous quarter but is multi-product in the current quarter.
Churn rate: Number of churned multi-product accounts divided by the previous quarter's multi-product account total, expressed as a percentage.
Deduplication
Accounts are keyed by Salesforce Account ID. If multiple Account IDs share the same account name, only the one with the highest combined revenue is kept in the accounts table. The accounts table shows the top 100 multi-product accounts by revenue.
Pipeline methodology
Data source
The Pipeline tab pulls from Salesforce Opportunity records for FY2026 and beyond. Unlike the Dashboard tab (which uses Orders), this tab shows all opportunities regardless of stage — open deals in the pipeline, closed-won, and closed-lost.
The SOQL query fetches: Account name, Opportunity name, Amount, Stage, Record Type, Close Date, Owner, Won_Amount__c, Lost_Amount__c, Original_Product__c, and Account_Products__c.
Multi-product filter
Only opportunities on accounts with 2+ products in their Account_Products__c field are included. The same product detection keywords from the Dashboard methodology apply.
This means: if an account's Account_Products__c says "airSlate; signNow", all of that account's FY2026 opportunities appear in the Pipeline tab — regardless of which specific product the opportunity is for.
Opportunity types
The Record Type (shown as "Type" in the table) comes from Salesforce's RecordType.Name field on each opportunity. Common types include Upsell, Renewal, and new business record types. All types are shown without filtering.
Status classification
| Status | Definition | Amount shown |
|---|---|---|
| Open | IsClosed = false | Opportunity Amount |
| Won | IsWon = true | Won_Amount__c in KPI, Amount in table |
| Lost | IsClosed = true and IsWon = false | Opportunity Amount |
Quarter assignment
Each opportunity is assigned to a quarter based on its CloseDate using the same fiscal calendar (Q1 = Jan-Mar, Q2 = Apr-Jun, Q3 = Jul-Sep, Q4 = Oct-Dec). The quarter filters in the scroller correspond to these close-date quarters.
Limitations
The pipeline shows up to 200 deals to keep page load fast. If more than 200 multi-product opportunities exist in FY2026, only the first 200 (sorted by close date, then amount) are included.
As with the Dashboard tab, Account_Products__c reflects today's product mix. An account that recently added a second product will show all its FY2026 opportunities here, even if the second product was added mid-year.
Interest YOY methodology
Data source
The Interest YOY tab pulls from Salesforce Opportunity records created since January 2021. Unlike the Dashboard (which uses Orders/active subscriptions), this tab captures interest signals — any opportunity where the account or the deal itself references multiple products.
Multi-product interest definition
An account shows multi-product interest in a quarter if it has any opportunity created during that quarter where either of these fields lists 2+ distinct products:
| Field | What it captures |
|---|---|
Account_Products__c | Products currently on the account (same as Dashboard tab) |
Original_Product__c | The specific product the opportunity is for — combined with account products, this reveals cross-product interest even before a deal closes |
Both fields are parsed using the same product keyword detection (airSlate, altaFlow, DAH, signNow, pdfFiller). The union of products found across both fields is used.
How it differs from the Dashboard
| Aspect | Dashboard | Interest YOY |
|---|---|---|
| Data source | Orders (Paid/Activated) | Opportunities (all stages) |
| What it measures | Active multi-product subscriptions | Multi-product interest signals |
| Product detection | Account.Product__c only | Account_Products__c + Original_Product__c |
| Quarter assignment | Order effective date overlaps quarter | Opportunity created date falls in quarter |
| Includes lost deals | No (only active subscriptions) | Yes (interest exists regardless of outcome) |
Quarter assignment
Each opportunity is assigned to a quarter based on its CreatedDate (not CloseDate). This captures when the interest was first expressed, giving an earlier signal than close-date-based views.
Churn definition
In the Interest context, "churn" means an account that showed multi-product interest last quarter but has no multi-product opportunities created in the current quarter. "New interest" means an account that didn't show multi-product interest last quarter but does this quarter.
This is more volatile than Dashboard churn because it depends on opportunity creation cadence, not subscription status.
Exclusions
Test and non-product accounts are excluded: FleetSage, Care Access, Amgen Inc., Wise Owl Medical Supply, TEST-Co.
Expansion methodology
Data source
The Expansion tab pulls from Salesforce OrderItem records (order line items) linked to Paid or Activated orders since October 2020. Unlike the Dashboard tab (which uses Account.Product__c for product detection), the Expansion tab uses OrderItem.Product2.Name — the actual product on each individual order line — to determine when each product was first purchased.
Account.Product__c which reflects current state only.Sequential expansion vs bundle customers
| Type | Definition | Gap |
|---|---|---|
| Sequential expansion | Account had their first order for Product A in an earlier quarter than Product B. They genuinely expanded over time. | Gap > 0 quarters |
| Bundle customers | Account's first orders for all products share the same effective date quarter — they bought a multi-product bundle from the start (e.g. airSlate Business Cloud). | Gap = 0 quarters |
Gap calculation
The gap is the number of fiscal quarters between the quarter of the first order for Product A and the quarter of the first order for Product B. Only the gap between the 1st and 2nd product is used (even for 3-product accounts). The average shown in the KPI is calculated only across sequential expansion accounts (gap > 0).
Expansion path charts
The "Most common expansion paths" chart counts how many accounts have each From → To product pair as their first two products in chronological order. The "First product" doughnut shows which product accounts started with before expanding.
The two QtoQ charts show, per fiscal quarter, how many accounts added their second product (accounts) and what revenue those second-product orders represented.
Filters
The product filter scroller on the accounts table filters to accounts where the selected product appears anywhere in their expansion journey — either as the starting product or one they added. Only sequential expansion accounts (gap > 0) are shown in the table.
Data refresh
All tabs are refreshed simultaneously by running sf_dashboard_refresh.py, which connects to Salesforce, pulls fresh order and opportunity data, and generates cross_product_data.js. The page reads this file at load.
Last refreshed: —