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

# Reports & Analytics

> AR aging, MRR, ARR, churn, and cash-collected reports for revenue health and collections operations

The Reports page at `/dashboard/commerce/reports/` rolls up your invoicing, subscriptions, and payments into the dashboards you actually need to run a service business — accounts receivable health, recurring revenue trends, and cash-flow visibility. Every report is exportable to CSV and can be sent on a schedule via [email automations](/how-tos/workflows).

## Reports at a glance

<CardGroup cols={2}>
  <Card title="AR Aging" icon="hourglass-half">
    Overdue invoices bucketed by days outstanding. The single most useful collections report.
  </Card>

  <Card title="MRR / ARR" icon="chart-line">
    Recurring revenue trends, with new/expansion/churn breakdown.
  </Card>

  <Card title="Cash Collected" icon="dollar-sign">
    Actual cash received vs. invoiced amount over a period.
  </Card>

  <Card title="Churn & Retention" icon="user-minus">
    Subscription cancellations and customer churn rates.
  </Card>
</CardGroup>

## Accounts Receivable (AR) Aging

The AR aging report buckets unpaid invoices by how long they've been outstanding. The standard view:

| Bucket      | Description               |
| ----------- | ------------------------- |
| **Current** | Issued, not yet due       |
| **0–30**    | Overdue 1–30 days         |
| **31–60**   | Overdue 31–60 days        |
| **61–90**   | Overdue 61–90 days        |
| **90+**     | Overdue more than 90 days |

The 90+ bucket is usually the danger zone — invoices that old often need writing off or escalating to collections. Watching the bucket move (more invoices sliding into 31–60 this month than last) tells you whether your collections process is working.

### Drilling in

Each bucket links to the underlying invoice list. From there:

* Click an invoice to see its full status and contact
* **Send reminder** to email a payment-link
* **Mark as Paid** for offline payments
* **Void** for invoices that should never have gone out

### Automating reminders

Pair the AR aging report with [Workflows](/how-tos/workflows) to auto-email reminders when invoices cross thresholds. See [Track AR Aging](/how-tos/track-ar-aging) for the full automation pattern.

<Tip>
  Best practice: send a friendly reminder at 7 days overdue, a firmer one at 30 days, and a personal call/email at 60 days. Anything that hits 90+ days unpaid usually needs human escalation.
</Tip>

## Monthly Recurring Revenue (MRR)

MRR sums all active subscriptions at their monthly-equivalent value:

* A `$99/month` sub contributes `$99`
* A `$999/year` sub contributes `$83.25` (`$999 ÷ 12`)
* A `$1,500/quarter` sub contributes `$500`

The MRR dashboard shows:

* **Current MRR** — Snapshot at the report date
* **MRR over time** — Line chart by month
* **MRR breakdown** — By plan, by client segment, or by date cohort

### MRR movement

Most useful for SaaS-style businesses, the MRR movement view splits monthly change into:

* **New MRR** — From subscriptions that started this month
* **Expansion MRR** — From upgrades on existing subscriptions
* **Contraction MRR** — From downgrades on existing subscriptions
* **Churn MRR** — From cancellations
* **Net New MRR** — `New + Expansion − Contraction − Churn`

A healthy SaaS business has Net New MRR > 0 every month. A healthy services business with retainer work might have flatter MRR but higher per-client revenue from one-time invoices.

## Annual Recurring Revenue (ARR)

ARR is `MRR × 12`. It's the standard headline metric for SaaS valuations and investor reporting. The ARR dashboard mirrors the MRR dashboard at the annualized scale.

For service businesses, ARR is often less meaningful than total revenue (which includes one-time project work). Watch both — ARR for the predictable base, total revenue for the full picture.

## Churn rate

Churn rate measures how much recurring revenue you lose per period:

* **Customer churn** — `canceled customers ÷ total customers at start of period`
* **Revenue churn (gross)** — `MRR lost to cancellations ÷ MRR at start of period`
* **Revenue churn (net)** — `(Churn MRR − Expansion MRR) ÷ MRR at start of period`

Net revenue churn can be negative if expansion outpaces churn — a "negative churn" business that grows recurring revenue without adding new customers. Rare and valuable.

## Cash collected vs. invoiced

The cash-flow view compares two numbers per period:

* **Invoiced** — Total dollar amount of invoices sent
* **Collected** — Total payments received

The gap is your AR — money you've billed but not yet collected. A growing gap means collections are falling behind invoicing; a shrinking gap means you're catching up.

This view is often more meaningful than just "revenue" for service businesses, because invoiced ≠ collected and your bank account cares about the latter.

## Churn and retention dashboards

Beyond gross churn rate, the retention dashboard shows:

* **Cohort retention** — Of customers who started in a given month, how many are still subscribed N months later
* **Logo retention** — Customers retained, regardless of revenue
* **Net dollar retention** — Revenue from a cohort, including expansion, divided by their starting revenue (>100% means cohorts grow over time)

## Filters and segments

Every report supports filtering by:

* **Date range** — Custom from/to or pre-built (this month, last quarter, YTD)
* **Client segment** — CRM segments, tags, or custom queries
* **Plan or product** — Specific subscription plans or product categories
* **Owner** — The team member who owns the client relationship

Combine filters to slice — e.g., "MRR for enterprise clients in the SEO plan over the last 12 months."

## Exports

Every report exports to CSV with all the underlying line items. Useful for:

* **Accounting reconciliation** — Hand the CSV to your accountant for monthly close
* **Investor reporting** — Pull the MRR/ARR figures into your monthly investor update
* **Custom analysis** — Drop into a spreadsheet or BI tool for deeper analysis

The export includes raw data — invoice numbers, client names, amounts, dates, statuses — so you can rebuild any aggregate in your own tooling if needed.

## Scheduled report emails

Set up periodic email delivery of any report:

<Steps>
  <Step title="Open the report you want to schedule">
    AR aging, MRR, etc. — any of them.
  </Step>

  <Step title="Click Schedule">
    From the report's actions menu.
  </Step>

  <Step title="Pick frequency and recipients">
    Daily, weekly, monthly. Add yourself, your finance team, your investors.
  </Step>

  <Step title="Pick format">
    PDF for human-readable; CSV for spreadsheet import; both attached.
  </Step>

  <Step title="Save">
    The report runs on schedule and lands in inboxes automatically.
  </Step>
</Steps>

Common cadences:

* **Daily AR aging** for the collections lead
* **Weekly cash-collected** for the operations team
* **Monthly MRR/ARR** for leadership and investors

## Real-time vs. point-in-time

Reports default to **point-in-time as of "now"**:

* AR aging: as of now, all currently overdue invoices
* MRR: as of now, all currently active subscriptions
* Cash collected: from period start to now

For historical analysis (what was MRR at the end of Q1?), use the **as-of date** picker — the report recomputes based on subscription state at that historical point.

## API patterns

Reports are queryable via `/api/crm/billing/reports/*`:

* `GET /api/crm/billing/reports/ar-aging` — AR aging buckets and line items
* `GET /api/crm/billing/reports/mrr?as_of=...` — MRR at a date
* `GET /api/crm/billing/reports/churn?period=month` — Churn for a period
* `GET /api/crm/billing/reports/cash-collected?from=...&to=...` — Cash flow for a date range

## Troubleshooting

<AccordionGroup>
  <Accordion title="MRR seems too low compared to subscriptions list">
    Check subscription statuses. MRR counts `active`, `past_due`, and `paused` subscriptions. `canceled` and `trialing` aren't counted. Filter the subscriptions list to those statuses and re-add — the totals should match.
  </Accordion>

  <Accordion title="AR aging shows invoices that are paid">
    The report has a brief delay after a payment lands (usually under a minute). If a paid invoice is still in the report 5+ minutes later, refresh the report. If it persists, check the invoice's status — it may show paid in summary but have an unmatched payment that didn't fully reconcile.
  </Accordion>

  <Accordion title="Cash collected report missing recent payments">
    The processor's webhook may not have arrived yet. Check the [Payments — webhook health](/commerce/payments) and verify the processor connection. Manual payments need to be marked paid in Hiveku to appear in this report — bank-only deposits don't auto-appear.
  </Accordion>

  <Accordion title="CSV export is missing some columns I need">
    The default export is the standard column set. Use the API directly for custom column selection, or run a custom report from the API and post-process. The dashboard CSV is meant for the common cases.
  </Accordion>

  <Accordion title="Scheduled report email isn't arriving">
    Check that the schedule is enabled and that the recipient email is correct. Also confirm your sending domain is verified — see [Email Domains](/email/domains). Internal scheduled reports use the same email infrastructure as outbound transactional emails.
  </Accordion>
</AccordionGroup>

## What's next?

<CardGroup cols={2}>
  <Card title="Track AR Aging" icon="rocket" href="/how-tos/track-ar-aging">
    Find overdue invoices and automate follow-up.
  </Card>

  <Card title="Subscriptions" icon="repeat" href="/commerce/subscriptions">
    Where MRR and ARR come from.
  </Card>

  <Card title="Workflows" icon="bolt" href="/how-tos/workflows">
    Automate report-driven actions like reminder emails.
  </Card>

  <Card title="Invoices" icon="file-invoice-dollar" href="/commerce/invoices">
    The transactions that drive AR aging.
  </Card>
</CardGroup>
