Skip to content

Reports & analytics

CPQ reports on the records it already holds — quotes and quote lines, products, customers, approvals, documents and campaigns — so questions like “what is in the pipeline”, “what are we discounting away” and “which products actually make money” are answered without moving data anywhere else. Everything here is read-only: a report calculates, it never changes a record.

The app opens on Dashboard, the one place that summarises the whole quote-to-cash picture in a single screen. It draws four blocks of headline figures:

Block What it reports
Revenue Won revenue, month-to-date and year-to-date, and growth against the preceding period of equal length
Quotes Total, open, won and lost quotes, and the conversion rate between them
Contracts Total and active contracts, contracts expiring within 30 days, and subscription MRR/ARR
Pipeline Open pipeline value, weighted value, average deal size and deal count

Below them sit a revenue trend over time, a breakdown of quotes by status, a product performance table (quotes, revenue and period-on-period growth per product), a top-performers list, and a customer insights table with each customer’s contract count, ARR, health score and risk level.

A quote counts as won when it reaches ACCEPTED or CONVERTED, and as lost at REJECTED or DECLINED. Everything from DRAFT through SENT is open pipeline, weighted by status when the dashboard computes weighted value — approved 80%, presented or sent 60%, in review 50%, pending approval 40%, draft 20%.

The date-range control at the top of the dashboard is honoured: it scopes the quote figures, the trend, product performance, top performers and the quote win-rate part of customer health. Month-to-date and year-to-date are always calendar-based, and the contract, ARR and invoice signals are point-in-time rather than ranged.

The dashboard’s MRR and ARR are read from the mrr and arr fields stored on each active subscription, which nothing in CPQ populates — see Subscriptions. The Export button beside the date range calls an endpoint the API does not implement, so it reports a failure; export from a report screen instead.

The Reports module opens on a report catalogue: sixteen cards grouped into Sales, Products, Financial, Customers and Operational, each opening the screen that carries that family of reports. The left-hand menu is configurable per company, so what it lists is up to your administrator; the catalogue is the dependable way in.

Each screen covers a whole family with tabs rather than one report per page — so the Customers screen holds top customers, lifetime value, win rate, segmentation, churn risk and new-versus-existing together. A card opens its family screen on that screen’s first tab, which is not always the report named on the card — the three Customers cards all land on top customers — so pick the tab once you are there.

The rep leaderboard has no catalogue card and no menu entry of its own: open it at /reports/sales/by-salesperson. The same per-rep figures also appear as a By salesperson tab on the Sales Pipeline screen, which is on the catalogue.

  • Quote funnel — how many quotes sit at each status and what they are worth, with each stage’s share of the total and its conversion from the stage before, ordered draft → in review → approved → presented → accepted → rejected → expired.
  • Win/loss — win and loss rates, won and lost value, and the average size of a won deal against a lost one.
  • Quote velocity — for accepted quotes, the average, fastest and slowest turnaround by quote type. Turnaround is measured from creation to the quote’s last change, so treat it as a working proxy for time-to-close rather than an exact one.
  • Sales by product and sales by salesperson — revenue, quantity and quote count per product (top 50), and quotes, wins, won value, win rate and average deal size per user (top 100). Sales by product counts accepted quotes only. Sales by salesperson counts every quote a user raised, and reports wins, won value and win rate against that total — so read its quote column as everything the rep put out, not as accepted work.
  • Discount analysis — the hundred most heavily discounted quotes with the discount taken on each, plus the average discount and the total given away.
  • Sales pipeline — open quotes by stage with a fixed probability weighting (draft 10%, in review 30%, approved 50%, presented 70%) and the resulting weighted value.
  • Quote volume trends — quotes raised, their value, the average, and wins and win rate per period. Monthly by default; daily and weekly are available on the API.
  • Price realization — for each product, average list price against average net price on quote lines, the realisation rate against the catalogue list price, the discount taken, the spread from cheapest to dearest line, and revenue won (top 100 products).
  • Discount effectiveness — quotes bucketed into discount bands (0%, 1–5%, 6–10%, 11–15%, 16–20%, 21–30%, over 30%) with the win rate, won value and average deal size in each, and the band with the best win rate called out. This is the report to reach for when you want to know whether a deeper discount is actually buying a higher win rate.
  • Promotional effectiveness — per campaign: quotes carrying the promotion, wins, win rate, revenue, discount given and a return figure.
  • Competitor comparison — built from the competitors recorded on quotes, so it stays empty until your team fills that in on the quote.

Price variance appears as a tab on the pricing screen but currently fails — its query joins quotes to users on mismatched key types and errors before it returns. Use price realization, which reports the same per-product spread.

  • Product performance — quotes, wins, win rate, quantity, revenue, average price and average margin per product, for the hundred best-selling products that appear on at least one quote.
  • Product mix — the same picture rolled up by product category and family, with each group’s share of revenue.
  • Product profitability — revenue, cost and gross profit per product from accepted quote lines, ranked by margin (top 50).
  • Slow-moving products — sellable, active products with no quote in the last 90 days (the threshold is adjustable), never-quoted products first.
  • Top customers — accepted revenue, quote count, win rate, average deal size and last quote date per customer (top 100).
  • Customer lifetime value — first and last purchase, number of purchases, lifetime value, average order value and value per month of the relationship.
  • Customer win rate — win and loss counts per customer, limited to customers with at least three quotes so the rate means something.
  • Customer segmentation — customers, quotes, wins and revenue grouped by customer segment, with each segment’s share of revenue.
  • Repeat business — customers who have bought at least twice, with the average gap between purchases.
  • Churn risk — customers whose last accepted quote is older than 90 days (adjustable), scored against their own normal buying interval, so a customer who buys monthly is flagged long before one who buys annually.
  • New vs existing — the monthly split of accepted revenue between first-time and returning customers.
  • Revenue forecast — projects the next three months (adjustable) by averaging two views: the weighted open pipeline falling in each month, and a trend extrapolated from the last six months of won revenue. Confidence is reported as 60%, 50% and 40% for the first, second and third month out — the further out, the less it should be trusted.
  • Pipeline value — open pipeline by stage with the same probability weighting the sales pipeline report uses.
  • Bookings trends — accepted quotes by month with month-on-month growth.
  • Margin analysis — revenue, cost and gross margin by month from accepted quote lines.
  • Approval bottlenecks — per approval process and step: how many requests went through, how many were approved, rejected or are still pending, and the average and worst turnaround in hours. The slowest step is named in the summary.
  • Configuration complexity — for each configurable product, how many quotes carry it and how many lines and configuration choices those quotes typically involve.
  • Quote modifications — quotes saved more than once, with the version count, when the first and last change happened, and how many people touched it.
  • Document generation — per document template: documents generated, unique quotes, how many were sent, how many came back fully signed, and the send and sign rates.

Quote cycle time and user activity are also offered on the operational screen, but both fail: they join quotes and approvals to users on mismatched key types and error out. The other four reports on that screen are unaffected.

The four subscription reports — renewal tracking, subscription growth, cohorts and usage revenue — are written against an older subscription table and do not run against the live schema, so Reports → Subscription Analytics returns nothing. For what CPQ can tell you about recurring revenue today, use Subscriptions and the dashboard’s contract block.

Every report screen carries a date-range control (last 7, 30 or 90 days, or year to date), and some carry rep, status or grouping filters as well. The date-range selection is not currently sent in a form the reporting API reads, so reports return all history regardless of the range shown. That is worth knowing before you compare two figures that look like they cover different periods: today they do not. The dashboard’s own date range is a separate control and does work.

Every report screen has Excel and PDF buttons, and they are the dependable way to get numbers out. The export is produced by the server from the same calculation the screen ran, so it carries the full result — every row, plus the report’s summary figures on their own sheet or block and a note of when it was generated. The API additionally serves CSV.

Two things to expect:

  • The export button on a screen always exports that screen’s headline report — the funnel for quote performance, price realization for pricing, top customers for customers, revenue forecast for financial, product performance for products, the pipeline for sales pipeline — not whichever tab you happen to be looking at. The operational screen’s export is wired to quote cycle time, which fails, so that one export errors.
  • The Excel file is a spreadsheet in Excel’s XML format saved under an .xlsx name, so Excel opens it after warning that the extension does not match the contents. Choose PDF if that warning is a nuisance.

Most report screens are still reading the older field names for the data they fetch, so a good many table columns and chart series render blank or as zero even though the report itself returned real numbers. What fills in reliably today is the dashboard, the quote count on the report catalogue, and the configuration-complexity table on the operational screen. Until the screens are brought back into step, export the report: the exported file carries the full result the report calculated, unaffected by what the screen renders.

CPQ ships a report builder (pick a data source, tick columns, add filters, group, choose a chart, preview), a saved-reports library, and a report scheduler (frequency, recipients, format). None of the three is usable yet:

  • The builder’s Run and Save call endpoints the API does not implement, so both come back as errors, and its Export and Schedule buttons are not wired to anything.
  • The saved-reports library reads its list in a shape the API does not return.
  • The scheduler sends its form under different field names than the API expects, so saving a schedule is rejected — and, more fundamentally, nothing in CPQ runs a scheduled report. There is no job that picks up due schedules, renders them or emails them, so a schedule would not deliver anything even if it saved. Treat scheduled report delivery as unavailable.

The API’s report-management endpoints do work — save a report definition, list and delete saved definitions, and run an ad-hoc query over quotes, quote lines, contracts, subscriptions, products or ledger accounts, with column, filter, group and sort names strictly validated before they reach the database. They have no working screen in front of them.

Custom dashboards are an API-only capability today. The API is complete — create a named dashboard, add, change and remove widgets, clone a dashboard, and fetch each widget’s data — but nothing in the web app drives it.

Both /dashboard-builder and the Dashboard Builder tile under Reports open the same screen, and that screen is a design mock-up: it renders sample charts against fixed data, and its Save and Load buttons only show a confirmation message. Nothing you arrange there is stored. Use the main Dashboard for a live picture, and reach the dashboard API from an integration if you need dashboards of your own.

For anyone building against that API: a widget is a KPI card, a bar, line or pie chart or a table, pointed at a data source with a metric (count, sum or average), an optional field to aggregate, an optional field to group by, and a display format. The widget queries resolve for quotes and subscriptions only; contracts, invoices, products and customers come back as zero with a query error behind them. Within those two, the fields a widget may group by or aggregate are whitelisted: for quotes, group by quote_type, currency_code or created_by and aggregate grand_total, discount_total, subtotal or tax_total; for subscriptions, group by status or billing_frequency and aggregate mrr, arr or total_contract_value. Anything outside that list — including status on a quote, whose real field is the quote status — makes the widget read zero.

An executive dashboard, a team-performance view and an activity feed exist as screens, but the endpoints behind them are written against an older schema and error, so they return nothing. /analytics itself redirects to the executive dashboard, and the tabbed analytics screens at /analytics/sales, /analytics/quotes, /analytics/products and /analytics/pipeline call endpoints the API does not implement, so they stay empty too. The main Dashboard described at the top of this page is the working equivalent and covers the same ground.

Reporting sits behind the same role permissions as the rest of CPQ: a user needs view rights on the reports area to open any report, and the same right covers exporting it. Reports are always scoped to the signed-in user’s company; there is no cross-company reporting.

  • Quotes & approvals — quotes, their statuses, discounts and approval steps are what most reports count.
  • Products & pricing — the catalogue, price books and campaigns behind the product and pricing reports.
  • Subscriptions — recurring revenue figures and their current limitations.
  • Billing & payments — invoice and payment history feeds the customer health scores on the dashboard.