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

# Read Revenue and Conversion Signals

> Understand the formulas and event boundaries behind every Analytics chart.

export const RubaSocials = () => {
  if (typeof document === "undefined") {
    return null;
  }
  const inject = () => {
    const footer = document.getElementById("footer");
    if (!footer || document.getElementById("ruba-socials")) {
      return false;
    }
    const isDark = document.querySelector("html.dark") || document.querySelector('html[class*="dark"]');
    const lineColor = isDark ? "#383838" : "#e8e8ed";
    const iconColor = isDark ? "#8e8e93" : "#86868b";
    const markColor = isDark ? "#ffffff" : "#08080c";
    const hoverColor = "#0071e3";
    const div = document.createElement("div");
    div.id = "ruba-socials";
    div.style.cssText = `display:flex;align-items:center;gap:20px;padding-top:20px;margin-top:20px;border-top:1px solid ${lineColor};width:100%`;
    const logo = `<a href="https://getruba.com" style="display:inline-flex;height:24px;align-items:center;gap:8px;text-decoration:none;color:${markColor};line-height:1;"><svg width="24" height="24" viewBox="0 0 120 120" aria-hidden="true" style="display:block;flex:none;"><g transform="translate(2.5 0)"><path d="M19 25h59L65.43 47H19a4 4 0 0 1-4-4V29a4 4 0 0 1 4-4Z" fill="${markColor}"/><path d="M19 73h31.57L38 95H19a4 4 0 0 1-4-4V77a4 4 0 0 1 4-4Z" fill="${markColor}"/><path d="M85 25h25L70 95H45Z" fill="#007AFF"/></g></svg><span style="display:inline-flex;height:24px;align-items:center;font-weight:600;font-size:15px;color:${markColor};letter-spacing:-0.01em;line-height:1;">Ruba</span></a>`;
    const spacer = `<div style="flex:1"></div>`;
    const ig = `<a href="https://instagram.com/getruba" target="_blank" rel="noopener" aria-label="Instagram" style="display:flex;align-items:center;color:${iconColor};transition:color 0.15s ease;" onmouseover="this.style.color='${hoverColor}'" onmouseout="this.style.color='${iconColor}'"><svg width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.8" stroke-linecap="round" stroke-linejoin="round"><rect x="2" y="2" width="20" height="20" rx="5" ry="5"/><path d="M16 11.37A4 4 0 1 1 12.63 8 4 4 0 0 1 16 11.37z"/><line x1="17.5" y1="6.5" x2="17.51" y2="6.5"/></svg></a>`;
    const li = `<a href="https://linkedin.com/company/getruba" target="_blank" rel="noopener" aria-label="LinkedIn" style="display:flex;align-items:center;color:${iconColor};transition:color 0.15s ease;" onmouseover="this.style.color='${hoverColor}'" onmouseout="this.style.color='${iconColor}'"><svg width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.8" stroke-linecap="round" stroke-linejoin="round"><path d="M16 8a6 6 0 0 1 6 6v7h-4v-7a2 2 0 0 0-2-2 2 2 0 0 0-2 2v7h-4v-7a6 6 0 0 1 6-6z"/><rect x="2" y="9" width="4" height="12"/><circle cx="4" cy="4" r="2"/></svg></a>`;
    const x = `<a href="https://x.com/getruba" target="_blank" rel="noopener" aria-label="X" style="display:flex;align-items:center;color:${iconColor};transition:color 0.15s ease;" onmouseover="this.style.color='${hoverColor}'" onmouseout="this.style.color='${iconColor}'"><svg width="18" height="18" viewBox="0 0 24 24" fill="currentColor"><path d="M18.244 2.25h3.308l-7.227 8.26 8.502 11.24H16.17l-5.214-6.817L4.99 21.75H1.68l7.73-8.835L1.254 2.25H8.08l4.713 6.231zm-1.161 17.52h1.833L7.084 4.126H5.117z"/></svg></a>`;
    const github = `<a href="https://github.com/rubadot" target="_blank" rel="noopener" aria-label="GitHub" style="display:flex;align-items:center;color:${iconColor};transition:color 0.15s ease;" onmouseover="this.style.color='${hoverColor}'" onmouseout="this.style.color='${iconColor}'"><svg width="20" height="20" viewBox="0 0 24 24" fill="currentColor"><path d="M12 .7a11.5 11.5 0 0 0-3.64 22.4c.58.1.79-.25.79-.56v-2.24c-3.22.7-3.9-1.37-3.9-1.37-.53-1.34-1.29-1.7-1.29-1.7-1.05-.72.08-.71.08-.71 1.16.08 1.78 1.2 1.78 1.2 1.04 1.77 2.72 1.26 3.38.96.1-.75.4-1.26.74-1.55-2.57-.3-5.27-1.29-5.27-5.69 0-1.26.45-2.29 1.19-3.09-.12-.29-.52-1.47.11-3.05 0 0 .97-.31 3.16 1.18A10.96 10.96 0 0 1 12 6.09c.98 0 1.94.13 2.86.39 2.2-1.49 3.16-1.18 3.16-1.18.63 1.58.23 2.76.11 3.05.74.8 1.19 1.83 1.19 3.09 0 4.42-2.7 5.39-5.28 5.68.42.36.79 1.06.79 2.14v3.28c0 .31.21.67.8.56A11.5 11.5 0 0 0 12 .7Z"/></svg></a>`;
    div.innerHTML = logo + spacer + ig + li + x + github;
    footer.appendChild(div);
    return true;
  };
  if (!document.documentElement.dataset.rubaSocialsObserver) {
    document.documentElement.dataset.rubaSocialsObserver = "true";
    const observer = new MutationObserver(() => {
      if (!document.getElementById("ruba-socials")) {
        inject();
      }
    });
    observer.observe(document.body, {
      childList: true,
      subtree: true
    });
  }
  setTimeout(() => {
    if (!inject()) {
      const interval = setInterval(() => {
        if (inject()) {
          clearInterval(interval);
        }
      }, 500);
      setTimeout(() => clearInterval(interval), 10000);
    }
  }, 300);
  return null;
};

<link rel="stylesheet" href="/style.css" />

<RubaSocials />

Analytics groups orders, checkout outcomes, subscription state, and optional cost events into time buckets. Use this reference when a chart needs to be reconciled with raw records or reproduced through the metrics API.

## How metrics are grouped

The selected range is divided into equal intervals of one hour, day, week, month, or year. Each interval becomes one chart point and one item in the API response.

## Subscriptions

| Signal                              | Calculation boundary                                                                                           |
| ----------------------------------- | -------------------------------------------------------------------------------------------------------------- |
| Monthly Recurring Revenue           | Active subscription amounts normalized to one month; yearly amounts are divided by 12 and trials are excluded. |
| Committed MRR                       | MRR from subscriptions still expected to renew; pending period-end cancellations are excluded.                 |
| Trial MRR Including Canceled Trials | Monthly-normalized value of every currently trialing subscription, including trials already canceled.          |
| Trial Committed MRR                 | Trial value that remains inside a committed period.                                                            |
| Active Subscriptions                | Records in `active` at the interval end, including canceled subscriptions whose paid term has not ended.       |
| New Subscriptions                   | Subscriptions whose first paid order falls inside the interval.                                                |
| Committed Subscriptions             | Active records without a cancellation, or with a cancellation after the interval.                              |
| Renewed Subscriptions               | Orders with `billing_reason = subscription_cycle`.                                                             |
| ARPU                                | MRR divided by distinct paying subscribers; zero when none exist.                                              |
| LTV                                 | `(ARPU - cost per user) / churn rate`; zero when churn is zero.                                                |
| New Subscriptions Revenue           | Gross value of first paid subscription orders in the interval.                                                 |
| Renewed Subscriptions Revenue       | Gross value of renewal orders in the interval.                                                                 |

## Cancellations

**Canceled Subscriptions** counts the decision timestamp; **Churned Subscriptions** counts the later moment the paid period ends. Churn Rate divides churned subscriptions by the active base at the beginning of the interval.

The dashboard repeats Active and Committed Subscriptions beside churn for context and groups cancellation reasons into `too_expensive`, `missing_features`, `switched_service`, `unused`, `customer_service`, `low_quality`, `too_complex`, and `other`.

## One-Time Products

**One-Time Products** counts completed non-recurring orders. **One-Time Products Revenue** adds their gross subtotals before fees.

## Orders

| Signal             | Calculation boundary                                                                                                |
| ------------------ | ------------------------------------------------------------------------------------------------------------------- |
| Revenue            | Gross subtotal of completed one-time, initial subscription, and renewal orders. Tax and Ruba fees are not deducted. |
| Orders             | Completed orders regardless of billing reason.                                                                      |
| AOV                | Revenue divided by order count; zero when count is zero.                                                            |
| Cumulative Revenue | Running revenue from the range start through the current interval.                                                  |

## Checkouts

**Checkouts** counts every created session. **Succeeded Checkouts** counts sessions that produced an order. **Checkout Conversion** divides succeeded by created and returns zero when no sessions exist.

## Net Revenue

Net Revenue removes platform and processor fees from order revenue. Net AOV divides that result by orders; Net Cumulative Revenue carries it forward across intervals. Separate new-subscription, renewal, and one-time net metrics appear when the matching revenue model exists.

## Costs

[Cost Insights](/features/cost-insights/introduction) supplies this dashboard through events containing `_cost`.

| Signal         | Calculation boundary                                                            |
| -------------- | ------------------------------------------------------------------------------- |
| Costs          | Ingested operating cost, retained at sub-cent precision.                        |
| Cost Per User  | Cumulative cost divided by active subscribers; zero without active subscribers. |
| Gross Margin   | Cumulative revenue minus cumulative cost.                                       |
| Gross Margin % | Gross margin divided by cumulative revenue; zero without revenue.               |
| Cashflow       | Revenue minus cost inside the current interval rather than cumulatively.        |
