# Invoices

The **Invoices** page (sidebar → **Invoices**) is the accounts-receivable view: what buyers and channels still owe you, how overdue it is, and the full detail behind any single invoice.

---

## Overview

Open **Revenue → Invoices**. The page has four summary cards, an aging chart, and a filterable invoice table; select any row to open its full record. For the money on its way *to* you — payouts and installments — see [Cash & Disbursements](/revenue/cash-and-disbursements/).

![Invoices page: AR summary cards, aging buckets, and the invoice table](images/invoices.png)

## Summary cards

| Card | Meaning |
|------|---------|
| **Total Outstanding** | Sum of unpaid invoice balances, excluding paid, voided, and written-off invoices. |
| **DSO** | Days Sales Outstanding — how long, on average, invoices take to collect. |
| **At Risk (90+)** | Outstanding balance in the oldest aging bucket. |
| **Open Invoices** | Count of invoices with a remaining balance due. |

![Accounts Receivable summary cards with each value circled](images/invoices-cards.png)

Left to right: **① Total Outstanding**, **② DSO** (in days), **③ At Risk (90+)**, and **④ Open Invoices** (a count, not an amount).

## Aging buckets

The aging chart splits outstanding balances into **Current**, **1–30**, **31–60**, **61–90**, and **90+ days**. How "days overdue" is measured depends on who owes the money:

- **End-buyer invoices** (including Stripe direct billing) age from the **invoice due date**.
- **Marketplace and reseller invoices** age from the **expected disbursement date**.

Each bar shows the bucket's total balance and invoice count; **Export CSV** downloads the underlying invoices (one row each, tagged with its aging bucket and days overdue), not the bucket-level totals.

![AR aging buckets with the Current and 90+ balances circled](images/invoices-aging.png)

Here the bulk of the balance sits in **① Current (not due)**, while **② 90+ days overdue** isolates the at-risk balance and its invoice count — the same figure surfaced by the **At Risk (90+)** card. (The Overview **Overdue > 90 days** alert is a related but separately-computed view of past-due revenue, so its amount may differ.)

## Working invoices

The invoice table lists invoice ID, buyer, channel, issue and due dates, invoice amount, balance due, status, and aging. Filter by **search** (invoice ID or buyer), **status** (Draft, Invoiced, Overdue, Partial, Paid, Written Off, Voided), **date range**, and **channel**.

To inspect a single invoice:

1. Find the invoice in the table — use search or the status/date/channel filters to narrow the list.
2. Select **View Details** on its row.
3. Review the full record — billing and contract terms, financials, settlement, refunds and credits, provider references, and dunning — alongside a lifecycle timeline (issued → payment applied → disbursed/swept → written off).
4. Select **Back to invoices** to return to the list.

![Invoice detail: billing, contract, financials, and provider references with a lifecycle timeline](images/invoice-detail.png)

The header strip summarizes the invoice at a glance — the circled items below are the invoice **① status** (Paid, Invoiced, Overdue, …) and its **② amount**, with **balance due**, **amount paid**, and **aging bucket** beside them:

![Invoice detail header with status and amount circled](images/invoice-detail-summary.png)

## KPI calculation formulas

All amounts are in your base currency. See [Revenue Settings](/revenue/revenue-settings/) for base-currency and FX handling.

| KPI | Applies to | Formula | Calculation details |
|-----|------------|---------|---------------------|
| Total Outstanding | AWS, Azure, GCP, Stripe | `Σ balance due where balance > 0` | Excludes paid, voided, and written-off invoices. |
| DSO | AWS, Azure, GCP, Stripe | `round( (total outstanding ÷ credit sales) × 90 )` | Credit sales = invoices/records dated in the trailing 90-day window. This is the standard AR ratio, not an average of overdue days. |
| At Risk (90+) | AWS, Azure, GCP, Stripe | `Σ outstanding balance in the 90+ bucket` | Aging basis differs by counterparty (see below). |
| Open Invoices | AWS, Azure, GCP, Stripe | `count(invoices with balance due > 0)` | Common across channels. |
| Aging bucket | Stripe (end-buyer) | bucketed by `days since invoice due date` | Buckets: Current, 1–30, 31–60, 61–90, 90+. |
| Aging bucket | AWS, Azure, GCP (marketplace/reseller) | bucketed by `days since expected disbursement date` | Falls back to due date when no expected disbursement date exists. |
