Pre-production beta: a work in progress and a study of AI for real-world reporting. Review every output before you rely on it. About this beta
REPORT · PRICE-VOLUME-MIX

Price-volume-mix

See why revenue moved, by product. Upload units and revenue for two periods, one row per product. ReportForge works out the bridge, you explain the products that moved the most, and it writes the report.

What it is and when to use it

Price-volume-mix answers one question: between two periods, how much of the change in revenue came from price, from volume, from mix, and from products that were added or dropped?

You upload one row per product; ReportForge works out the bridge, you explain the products that moved the most, and it writes the report.

Use it when you have units and revenue by product for two periods and need to explain why revenue changed.

Step by step in the app

The screens use these names.

01

Start

On the dashboard, in the Start a new analysis band, choose Bridge price, volume and mix.

02

Set up and upload

On the setup page, choose the method and the materiality, add your file, and choose Create analysis. The setup page offers a sample CSV and a button labelled "view an example report".

03

Review

Only material products need an explanation. On the dashboard the analysis shows as In review until you finalize it.

04

Explain

Explain walks you through the material products one at a time, largest change first. You can also ask someone outside your account with a reason link.

05

Finalize or generate

Generate draft writes a report from the analysis as it stands. Finalize & generate locks the analysis and then writes the report.

06

Read the report

The report page shows the Fact check panel and the trust score. Exports and Actions (including Share) are on that page.

The file

One row per product, as a CSV or Excel file. Amounts are in dollars; units are whole numbers (no decimals, no negatives).

Columns in a price-volume-mix file
ColumnNeeded?What it is
Product_CodeRequiredYour unique code for the product. It is how ReportForge recognises the same product in both periods.
Product_NameRequiredThe name shown in the report.
Prior_UnitsRequiredUnits sold in the earlier period.
Prior_Revenue_USDRequiredRevenue in the earlier period.
Current_UnitsRequiredUnits sold in the later period.
Current_Revenue_USDRequiredRevenue in the later period.
Prior_List_Price_USDOptionalThe list (catalogue) price per unit in the earlier period.
Current_List_Price_USDOptionalThe list price per unit in the later period.
StatusOptionalActive or Inactive. Leave it blank and the product is treated as Active.

If you give list prices for both periods, the price effect is split into "list price changed" and "discounting changed". Without them, price is shown as one line.

After you finalize a period you can continue to the next one. That upload only needs Product_Code, Product_Name, Current_Units and Current_Revenue_USD: the earlier figures come from the period you finalized.

If something is wrong

If the file has a problem, the page lists the rows involved and what to fix. A missing column is reported once, before any row is checked. Row numbers match your spreadsheet: the header is row 1. These are the messages, as the code writes them.

Messages the price-volume-mix upload shows
WhereMessage you see (example values)What to do
Missing columnYour file is missing the Product_Code column. Add it to the first row of your file and upload again.Add the missing column.
Product_Code blankProduct_Code is required and blank on these rows.Fill in the code.
Product_Name blankProduct_Name is required and blank on these rows.Fill in the name.
UnitsUnits must be a whole non-negative number on these rows.Use whole numbers, no decimals, no negatives.
RevenueRevenue must be a valid number on these rows. (or) Revenue cannot be negative on these rows.Type a valid, non-negative amount.
Revenue with no unitsThese rows have revenue but zero units for the same period.Check the units or the revenue.
List priceList price must be a non-negative number on these rows.Fix or clear the list price.
StatusStatus must be Active or Inactive on these rows.Use Active or Inactive, or leave it blank.
Same product twiceThese rows repeat a Product_Code already used earlier in the file.Keep one row per product.
After the listFix these rows and re-upload the file. (or) Add the missing columns and upload the file again.Correct the file and upload again.

Three methods

You choose one on the analysis page. The default is Standard.

Standard (Method A)

Volume and mix are measured across all products together. A product's volume is its share of the overall change in units, and any shift in its own share of sales shows up as mix.

Price and volume only (Method B)

There is no separate mix. Each product's volume is simply its own change in units at its earlier price.

With interaction (Method C)

The same as Standard, with the effect of price and volume moving together shown as its own line.

New, discontinued and continuing products

New: no units in the earlier period, units in the later period, and the product has not appeared earlier in the chain of periods you have continued. Discontinued: marked Inactive, or no units in either period. Continuing: everything else.

New and discontinued products appear as their own lines in the bridge.

Materiality: what needs an explanation

A product is material when its revenue change is at least $50,000, or when it moved at least 10% and by at least $10,000. A product with no earlier revenue is judged on the dollar amount alone. Those are the starting values; you can change them on the page. Only material products need an explanation.

Explain mode

Explain walks you through the material products one at a time, largest change first. For each one, write why it moved, say whether the cause is one-time or recurring, and move on. You can split a change across several reasons, each with its own amount. A product you do not want to explain can be ignored, and you can undo that.

If you type a number in your explanation, ReportForge first checks it against that product's own figures (its change, prior and current revenue, the price, volume and mix effects and so on). If it matches one, the report quotes the real figure and verifies it like any other. If it matches nothing, the report shows it as your number, labelled as coming from your explanation. It never matches against a different product's figures.

What is in the report

The example report further down this page is built from the sample file pvm-sample.csv by the real engine, using the Standard method. It shows:

  • the bridge in summary figures: the revenue change, the list-price and discount effects, volume, mix, new products and discontinued products;
  • a table of every product with its prior and current revenue, total change, and its price, volume, mix and new or discontinued effects, with the material products marked;
  • a short written summary that states the figures of the bridge. The example text is fixed and gives no reasons; in your own report, the reasons are the ones you wrote.

Checks and the trust score

Each figure in the prose is checked back to your data in the Fact check panel. The report page also shows a trust score from 0 to 100. A report with unverified figures shows the Draft banner, a signal to review, not a failure of your data.

A price-volume-mix report cannot be published while any of these is true, and the page tells you which:

  • the report has no trust score;
  • a must-pass check has failed;
  • a number in the report is not tied to one of your figures yet. You resolve it in the Fact check.

Numbers you typed in your own explanations do not block Publish; they are treated as yours.

A draft is a real version you can read, but it cannot be published: finalize, then generate again to get a version you can publish.

How the numbers are checked

The AI is not allowed to state any number, name, date, category or ranking that is not in your uploaded data.

Variances and other comparison figures are computed from your data and given to the AI as facts to restate, not to calculate.

After the report is written, a validation pass reads each cited figure back against your data. Figures that match are marked verified; a report with unverified figures is shown as a Draft so you know to review it.

If you type a number in an explanation, it is checked against that line's own figures. If it matches none, it stays as you typed it and is treated as your number, not as a checked figure.

The narrative can still contain errors, so review every report before you rely on it.

Periods

After you finalize a period you can continue to the next one with Continue to next period. That upload only needs Product_Code, Product_Name, Current_Units and Current_Revenue_USD: the earlier figures come from the period you finalized.

If your file also includes Prior_ columns that disagree, the finalized figures win and the page tells you which products differed.

When every material product has a reason and a one-time or recurring answer, the period labels are filled in, and the figures tie out, Finalize & generate locks the analysis and writes the report.

The free trial covers one analysis covering one period. More analyses need a paid plan. On a Single Report plan, price-volume-mix is available only if it is your account's report type.

Working with others

Each analysis, and the reports made from it, has people who can look at it and people who can change it.

  • Account owner. Can always do everything on every analysis and report in the account, and can change who has access to anything. Only the owner manages billing, users, downgrading and closing the account.
  • Writers. Chosen per analysis. They can edit, upload, explain, finalize, generate reports, publish, delete versions and start the next period. They can also change who the writers and readers are, and they can always read.
  • Readers. Chosen per analysis. They can only look: they see finalized analyses and published reports, and nothing in progress. The page says "View only".
  • Choosing people. Open Sharing on the analysis page. There are two choices, Who can write and Who can read. Each is the default, All users of the account, or Selected users picked from the people active on your account. An analysis always keeps at least one writer.
  • Published reports. Once published, a report has its own setting, Who can read this report: All users of the account (the default), Selected users, or Writers only. The home page has a section, Reports shared with you, for published reports other people made and you may read.
  • Notifications. The bell in the top bar tells you when someone makes you a writer or a reader of an analysis, or picks you by name for a published report. There is no email for these.
  • Comments. On the report page, Actions then Comments opens a panel where you can add a comment, reply to one, and resolve or reopen a thread.
  • Extra users. Each plan is for one user. The account owner can add users at $5 a month each.
  • People outside your account. Share creates a read-only link for the report. To ask a colleague outside your account to explain a product, use a reason link (see Explain mode).

The example and the sample files

The figures were built from the sample file pvm-sample.csv by the real engine, and the text is fixed. No AI was used to produce this example.

Example · illustrative numbers

Price-Volume-Mix — Jan 2026 → Feb 2026

Built from the sample CSV you can download on this page, by the same engine your own upload runs through (Standard (Method A)). The sample amounts are small, so this example calls a product material at a $1,000 change — your own analysis uses the materiality you set. The written summary below is neutral, mechanical text that only states the figures of the bridge; it is not model output and gives no reasons.

Revenue change
$0
List price
$200
Discount
$300
Volume
-$2,014
Mix
-$1,786
New products
$4,500
Discontinued
-$1,200
Price-volume-mix example: each product's revenue change split into price, volume, mix and new or discontinued effects
ProductPrior rev.Current rev.Total changePriceVolumeMixNew / disc.
Premium Widget$5,000$5,500$500$500-$536$536$0
Standard GadgetMATERIAL$4,000$6,000$2,000$0-$429$2,429$0
Deluxe GadgetMATERIAL$8,000$4,000-$4,000$0-$857-$3,143$0
Smart SensorMATERIALNEW$0$4,500$4,500$0$0$0$4,500
Legacy CableMATERIALDISCONTINUED$1,200$0-$1,200$0$0$0-$1,200
Holiday Gift SetMATERIAL$1,800$0-$1,800$0-$193-$1,607$0
This example uses Standard (Method A) to bridge revenue between Jan 2026 and Feb 2026. Total revenue changed by $0. The bridge breaks that change into a net price effect of $500 (a list-price change of $200 and a discount change of $300), a volume effect of -$2,014, a mix effect of -$1,786, $4,500 from new products, -$1,200 from discontinued products. Standard Gadget changed by $2,000, made up of volume -$429, mix $2,429. Deluxe Gadget changed by -$4,000, made up of volume -$857, mix -$3,143. Smart Sensor changed by $4,500, made up of new-product revenue $4,500. Legacy Cable changed by -$1,200, made up of discontinued-product revenue -$1,200. Holiday Gift Set changed by -$1,800, made up of volume -$193, mix -$1,607. This text is illustrative: it states only figures from the bridge, and carries no explanation of why anything moved.
↓ Download pvm-sample.csv

Plans and credits

Price-volume-mix is one of the three report types. The free trial (10 AI Credits, one analysis covering one period, no card, no time limit) opens all three. Single Report ($20 a month, 200 AI Credits a month) covers one report type, chosen when you first buy it. All Reports ($40 a month, 500 AI Credits a month) covers all three.

Every analysis uses at least 5 credits, and you need at least 5 available to run one. Extra users are $5 a month each, and AI Credit packs add +100 credits for $5 a month. More analyses than the trial need a paid plan.

QUESTIONS

Price-volume-mix questions

Which method is the default?
Standard (Method A). You can choose another on the analysis page.
What are the three methods?
Standard (Method A) measures volume and mix across all products together. Price and volume only (Method B) has no separate mix. With interaction (Method C) is the same as Standard, with the effect of price and volume moving together shown as its own line.
Do I have to give list prices?
No. If you give list prices for both periods, the price effect is split into "list price changed" and "discounting changed". Without them, price is shown as one line.
How does it decide a product is new or discontinued?
New: no units in the earlier period, units in the later period, and the product has not appeared earlier in the chain of periods you have continued. Discontinued: marked Inactive, or no units in either period. Everything else is continuing.
Which products do I need to explain?
Only the material ones: a product whose revenue change is at least $50,000, or that moved at least 10% and by at least $10,000. You can change those starting values on the page.
Can I ask someone outside my account to explain a product?
Yes, in Explain, with a reason link tied to one email address. It expires after 5 days, stops working once you finalize, and can be answered once. Their answer arrives as a draft until you review and save it.
What blocks Publish?
A report cannot be published while a number in the report is not tied to one of your figures yet, a must-pass check has failed, or the report has no trust score. Numbers you typed in your own explanations do not block Publish.
Can I publish a draft?
No. A draft is a real version you can read, but it cannot be published: finalize, then generate again to get a version you can publish.
What do I upload to continue to the next period?
Only Product_Code, Product_Name, Current_Units and Current_Revenue_USD. The earlier figures come from the period you finalized. If your file also includes Prior_ columns that disagree, the finalized figures win.
What if I type a number in my explanation?
It is checked against that product's own figures. If it matches one, the report quotes the real figure and verifies it. If it matches nothing, the report shows it as your number, labelled as coming from your explanation.

Not the right report?

Flux compares one period with another, by account. Budget vs actual compares actual with budget, by account, for each period of a fiscal year. Price-volume-mix bridges a revenue change into price, volume and mix, by product.

KEEP EXPLORING
INVITE-ONLY BETA

Request an invite.

Invite-only beta · No credit card required