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.
Start
On the dashboard, in the Start a new analysis band, choose Bridge price, volume and mix.
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".
Review
Only material products need an explanation. On the dashboard the analysis shows as In review until you finalize it.
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.
Finalize or generate
Generate draft writes a report from the analysis as it stands. Finalize & generate locks the analysis and then writes the report.
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).
| Column | Needed? | What it is |
|---|---|---|
| Product_Code | Required | Your unique code for the product. It is how ReportForge recognises the same product in both periods. |
| Product_Name | Required | The name shown in the report. |
| Prior_Units | Required | Units sold in the earlier period. |
| Prior_Revenue_USD | Required | Revenue in the earlier period. |
| Current_Units | Required | Units sold in the later period. |
| Current_Revenue_USD | Required | Revenue in the later period. |
| Prior_List_Price_USD | Optional | The list (catalogue) price per unit in the earlier period. |
| Current_List_Price_USD | Optional | The list price per unit in the later period. |
| Status | Optional | Active 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.
| Where | Message you see (example values) | What to do |
|---|---|---|
| Missing column | Your 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 blank | Product_Code is required and blank on these rows. | Fill in the code. |
| Product_Name blank | Product_Name is required and blank on these rows. | Fill in the name. |
| Units | Units must be a whole non-negative number on these rows. | Use whole numbers, no decimals, no negatives. |
| Revenue | Revenue 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 units | These rows have revenue but zero units for the same period. | Check the units or the revenue. |
| List price | List price must be a non-negative number on these rows. | Fix or clear the list price. |
| Status | Status must be Active or Inactive on these rows. | Use Active or Inactive, or leave it blank. |
| Same product twice | These rows repeat a Product_Code already used earlier in the file. | Keep one row per product. |
| After the list | Fix 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.
Outside reason links
In Explain you can create a reason link for a product and send it to a colleague who knows the answer. Only price-volume-mix has this: the flux and budget-vs-actual pages do not have the control.
- The link is tied to one email address; the person has to enter that address to open it.
- It expires after 5 days, and it stops working once you finalize the analysis.
- It can be answered once.
- Their answer arrives as a draft. The product does not count as explained until you review it and save it. The report says plainly when an explanation came from an outside reply, and from whom.
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.
Versions, exports and read-only share links
Every analysis ends in the same report page.
- Versions. Every generation is saved as a new version of the report. The report page has a version switcher, each version has its own address, and a version can be deleted after a confirmation that names it. The Publish button appears on the current version only, and a published report can be reverted to unpublished.
- Exports. The Exports menu offers Download .docx, Export .md, Download PDF, Export facts .csv and Print. A Draft carries a draft marker in the Word and Markdown exports. The analysis pages have no export; exports are on the report page.
- Read-only share links. From the report page's Actions menu, Share creates a read-only link for someone outside your account. A link always expires (1 to 90 days) and can be password-protected. The share panel shows how many times a link has been viewed.
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.
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.
| Product | Prior rev. | Current rev. | Total change | Price | Volume | Mix | New / 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 |
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.
Price-volume-mix questions
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.
Upload prior and current balances by account. ReportForge computes the variance, you explain the material moves, and it writes a fact-checked report.
Compare actuals to budget by account and fiscal period, explain the material variances, and generate a fact-checked report.
Flux analysis, budget vs actual or price-volume-mix: the question each one answers, the file you upload and what you get, side by side.
How a ReportForge report is made: numbers computed from your file, your explanations, and every cited figure checked against your data. What it does not do.
Single Report $20 a month, All Reports $40 a month, monthly add-ons, and a free trial of 10 AI Credits with no card. Invite-only beta.