# Revenue Records

**Revenue Records** is the ledger behind every metric in the workspace. It shows the unified revenue records that Suger normalizes from each channel, alongside the raw source records they were built from.

---

## Overview

Open **Revenue → Revenue Records**. The page has a trend chart, two tabs, and a wide, exportable table — there are no summary cards here; the totals live on the [Overview](/revenue/overview/) lifecycle cards.

![Revenue Records: trend chart with Invoice/Collectable/Disburse series, the Lifecycle column, and the Columns control circled](images/revenue-records.png)

The chart series are circled in red — **① Invoice Amount**, **② Collectable Amount**, **③ Disburse Amount** — and in orange, **①** the per-row **Lifecycle** stage column (Billing, Cash Collected, Disbursed) and **②** the **Columns** control for customizing the table.

Two tabs switch between the normalized and source views:

- **All Records** — one normalized row per revenue event, with a consistent set of columns across every channel.
- **Raw Records** — the source-level records exactly as each channel reported them.

### Scope the page

1. Set the **date range** (defaults to the last 90 days).
2. Choose a **currency** — records are grouped and charted in the selected currency.
3. Optionally narrow to one channel with the workspace **Channel** filter at the top.

The chart above the table plots **Invoice Amount**, **Collectable Amount**, and **Disburse Amount** by month for the current scope. Use its menu to **Download SVG**, **PNG**, or **CSV** of the charted series.

## All Records

The **All Records** table has one normalized row per revenue event. Columns include the product and entitlement, CRM opportunity, buyer and country, **lifecycle** stage (Billing, Cash Collected, Disbursed), invoice date and amount, partner fee (amount and percent), collectable amount, due date and payment term, disburse date and amount, payout currency, tax, refund details, category, channel, sales motion, reseller, and the payment, earning, invoice, bank-trace, and disbursement reference identifiers.

To work with the table:

1. Type in **search** to narrow the list. Search runs on the server across the whole result set, not just the rows on screen.
2. Select **Columns** to show or hide columns and focus on what you need.
3. Select the **expand** control at the end of a row to open its full normalized detail.
4. Select **CSV** to export the current view.

Search is a **case-insensitive substring match** — a fragment matches anywhere in the value, so `acme` finds *Acme Corp*. It covers six fields: **buyer name**, **invoice ID**, **buyer ID**, **entitlement ID**, **disbursement reference**, and **offer external ID**. A term that matches none of those returns nothing, even if it appears in another column.

:::info
**CSV export covers the whole filtered result set, not just the rows on screen.** There is no row cap. Suger pages through the matching records **500 at a time** until it has fetched every row the current filters return, so a large export simply takes longer to assemble rather than being truncated. Narrow the channel, date range, or currency filters first if you only need part of the ledger.
:::

:::info
**One AWS invoice can produce several rows.** AWS reports revenue per buyer-transaction relationship, so a single AWS invoice that spans multiple contracts arrives as one revenue record per relationship. All of them keep the same invoice ID. That is why the record count here can exceed your invoice count for AWS, and why the same invoice ID can appear on more than one row.

The [Invoices](/revenue/invoices/) page aggregates those sibling rows back into a single invoice, matching on **invoice ID and currency**, so an AWS invoice is counted once there. Read Revenue Records as the event-level ledger and Invoices as the invoice-level view.
:::

## Raw Records

The **Raw Records** tab shows source-level records for the channels you've connected, so you can compare what a channel reported against Suger's normalized row. Cloud marketplace channels render a per-channel detail table; direct (Stripe) billing renders a payment-transactions view.

If a connected channel has no raw-record view, the tab shows *Raw records are not available for that channel.* If no channels are connected, it shows *No connected channels are available for raw records.*

:::info
Opening a record shows its **current** normalized state, not a full change history. Suger keeps the latest synced values for each record; step-by-step source event history is not yet available in this view.
:::

## KPI calculation formulas

Revenue Records has no summary KPIs; its chart totals the records currently in scope (channel, date range, currency).

| Charted series | Applies to | Formula | Calculation details |
|----------------|------------|---------|---------------------|
| Invoice Amount | AWS, Azure, GCP, Stripe | `Σ invoice amount` | Common across channels. |
| Collectable Amount | AWS | `Σ collectable amount exactly as AWS reported it` | AWS is the one channel Suger does **not** recompute: it preserves the collectable amount AWS supplies. That amount is net of marketplace fees and **includes** seller-remitted tax — the tax AWS disburses to you, which you then remit onward. Tax AWS collects and remits itself is informational and never affects it. |
| Collectable Amount | Azure, GCP | `Σ (invoice amount − channel fee)` | Channel fee only; no tax deduction. |
| Collectable Amount | Stripe | `Σ invoice amount` | Direct billing treats the full invoice as collectable. |
| Disburse Amount | AWS, Azure, GCP, Stripe | `Σ disbursed amount` | Counts only records the provider has marked disbursed. |

See [Overview](/revenue/overview/) for how these amounts roll up into the lifecycle stage cards, and [Revenue Settings](/revenue/revenue-settings/) for base-currency and FX handling.
