Price-volume-mix analysis for products that don’t fit a SKU list

PVM Bridge splits a change in sales into volume, mix and price across as many product attributes as you need. It runs in your browser, so your sales file never leaves your computer.

Free and open source. No account. Works with CSV and Excel files.

Sales bridge2025 to 2026Model › Finish › Color › Material
57.9M +4.8M +1.1M +0.8M +2.2M −0.1M +1.0M +3.5M −1.0M 70.4M 2025 Volume Mix:Model Mix:Finish Mix:Color Mix:Material Price Newconfigs Discont.configs 2026 50M 60M 70M
Sales 202557,908,260
Volume+4,843,531
Mix: Model+1,141,258
Mix: Finish+823,665
Mix: Color+2,244,655
Mix: Material−93,715
Price (like-for-like)+1,026,258
New configurations+3,517,202
Discontinued configurations−961,576
Sales 202670,449,538
Output from the tool’s built-in sample: one million made-up sales lines of a made-to-order product. The chart axis starts at 50M.

Any single grouping level gives the wrong price number

A standard bridge needs one product key. When a product is a combination of choices, such as a model, a finish, a color and a material, no single key works.

Group too finely

Most full combinations sold in only one of the two periods. They have no prior price to compare with, so real price changes disappear into “new products”.

Group too coarsely

A customer moving to a premium finish raises the average price of the model. The bridge reports it as a price increase, and it is not one.

What PVM Bridge does

It compares each configuration with the same configuration last period. Where there is no match, it falls back to the nearest group that did exist, in the attribute order you set.

Same data, two bridgesPrice effect reportedAgainst the true +3.21M
Grouped by model only+9.72M3 times too high
PVM Bridge, four attributes+3.19MWithin 1%

Test on three million made-up sales lines with a 4% price increase planted on part of the range, so the true answer is known. In the model-only bridge, a shift toward higher-priced color options is counted as price. Why the grouping level changes the price effect.

Built to be worked in

Setup stays on the left, results on the right. Every table can be copied, and every number can be traced.

How it works

Three steps, and the second one can be saved for next time.

1. Load

Drop in a sales export

A CSV or Excel file with one row per sales line: a date or period, units, sales and your product attributes.

2. Set up

Rank your attributes

Pick the two periods and put the attributes in order of importance. Use one attribute for a classic bridge, or several. Two columns can be combined into one attribute.

3. Read

Get the bridge

A waterfall, the largest movers behind each bar, the configurations that had no match, and an Excel file with the formulas in it.

What is in the tool

Built for the person who has to defend the numbers in a review.

Mix split by attribute

A separate mix line for each attribute, so you can say how much came from finish and how much from material.

List price and discounts

Add a gross sales column and the price effect splits into list price changes and discount changes.

Margin bridge

Add a cost column and the bridge moves to margin, with the rate effect split into selling price and unit cost.

Rebates and credits kept apart

Rows with sales and no units get their own line, so a rebate accrual never shows up as a price cut.

New and discontinued, your way

Show them as a price difference with units in volume, or at full sales outside volume and mix.

Price changes across the book

How much of matched sales went up 2% to 5%, stayed flat or went down, with the effect of each band.

New, lost, growing, shrinking

The change split by account, with net and gross retention. Works on customer, region or any other column.

Did the increase stick?

Enter the planned increase and see realized price against plan for each product group or customer.

Price gaps against peers

Put customer last and see who pays less than others for the same product, with the sales at stake.

Movers and drill-down

Click a bar to see what is behind it. Click a row to break it down by the next attribute. Every row adds up to its own sales change.

Setup check

The bridge is rerun with each attribute left out, so you can see how far the price number depends on your choices.

Match coverage and unmatched list

The share of sales compared against an exact prior configuration, and every new configuration with the reference price used.

Trend across periods

With dates in the file, one bridge per quarter or month shows when a price change took hold.

Roll-ups found for you

If product rolls up to family and category, the tool spots it and offers to add the levels in order.

One-file report

A single HTML page with the chart, bridge, summary and top movers. It holds totals and a written summary, names the file, the setup, its filter values and the top movers, and holds no rows, so it can be emailed.

Written summary

A plain-language paragraph of the bridge to paste into commentary. It is built from fixed patterns, so it never changes between runs.

Excel export with formulas

The bridge, coverage, movers and a detail sheet where every effect is a live formula, with a check row that should read zero.

Filters and data checks

Include or exclude values before calculating. A check tab counts returns, blank values and rows that were ignored.

Setup you can keep

The browser remembers your column mapping for the next file with the same columns, never the data or filter selections. Untick one box to turn it off, or save the setup to a file to share it.

Your data stays on your computer

Invoice-level sales by customer is not something to upload to a website. PVM Bridge loads a database engine into the browser tab and does the calculation there.

The data is not kept

The data lives in the tab’s memory. Close the tab or choose Clear data and it is gone. Only the column mapping is remembered, and you can turn that off. No cookies, no accounts. No tracking scripts.

Nothing is uploaded

The file is read by the page itself. You can confirm this in your browser’s network panel: loading a file sends no requests.

Open source

The calculation and the app are public under the MIT license, so your IT or audit team can read exactly what runs.

The same answer every time

The method is fixed arithmetic, not a language model. The same file and setup always give the same bridge.

Where it fits

Most teams choose between a spreadsheet they rebuild every month and a pricing suite they cannot justify. PVM Bridge sits between the two.

Spreadsheet templatePVM BridgeEnterprise pricing suite
Time to a first bridgeHours, then again each periodMinutes; the setup is rememberedAn implementation project
Products built from several attributesOne grouping level at a timeAny number of attributes, with fallback matchingUsually yes, after configuration
Hundreds of thousands of rowsSlow or over the row limitYes, in the browserYes
Where the sales data goesStays on your computerStays on your computerUsually the vendor’s servers
Can a reviewer check the numbers?If the formulas are readableExcel export with live formulas; open sourceDepends on the product
CostYour timeFreeQuoted by a sales team

Pricing

The analysis is free. A paid plan for repeat use and teams is planned and not available yet.

Available now

Free

$0
  • The full bridge, any number of attributes
  • Movers, drill-down and unmatched list
  • Excel and CSV export
  • List price and discount split, price-change bands
  • Filters, data checks, setup files
  • No account and no row limit
Open the tool
Planned

Pro

$19 per user per month, expected
  • Saved workspaces across devices
  • Shared setups for a team
  • AI commentary on each bridge
  • PowerPoint export
Follow on GitHub

Questions

Does it work for an ordinary product list?
Yes. Use a single attribute, such as product or SKU, and you get the standard volume, mix and price bridge. See a made-up product list.
Which calculation method does it use?
Volume at the prior average price, mix as the change in units valued against the group average, and price on exact matches only. The method page has the formulas and a worked example.
Does the attribute order change the result?
Volume and like-for-like price do not change. The way mix is split between attributes does, so put the attribute that defines the product first.
How are returns and credits handled?
Negative rows are netted against sales of the same configuration. The data check tab counts them so you can decide whether to filter them out.
What about Excel files?
An .xlsx file works: the first sheet is read, with the header in the first row. You can also copy a range of cells and paste it straight into the tool. For more than a few hundred thousand rows, CSV is faster.
Can I bridge budget to actual?
Yes. Put both in one file with a column that says which is which, and choose that column as the period. Budget becomes the prior period and actual the current one. The same works for forecast against actual, or one region against another. See a made-up budget and actual file.
Is it a margin bridge?
It can be. Add a cost column and the bridge is on margin, with the rate effect split into price and unit cost.