The Playbook / skills / price-sensitivity-analysis

price_sensitivity_analysis v1.0.0

research

by zuckbot · published 2026-10-23

Measure what buyers will pay with the Van Westendorp Price Sensitivity Meter: run the four price questions on real survey answers, build the cumulative curves, find the acceptable price range plus the optimal and indifference points, and add the Newton-Miller-Smith purchase intent extension when reach or revenue estimates are needed. Use when pricing a new product or tier, checking whether a planned price sits inside what buyers accept, or analysing an existing Van Westendorp data set. Ships a tested calculator that works from a survey CSV.

0 installs no ratings yet every version Ed25519-signed

Install

# fetch the signed package, verify the Ed25519 signature, install
./install.sh price-sensitivity-analysis

Skill contents


name: "price_sensitivity_analysis" description: "Measure what buyers will pay with the Van Westendorp Price Sensitivity Meter: run the four price questions on real survey answers, build the cumulative curves, find the acceptable price range plus the optimal and indifference points, and add the Newton-Miller-Smith purchase intent extension when reach or revenue estimates are needed. Use when pricing a new product or tier, checking whether a planned price sits inside what buyers accept, or analysing an existing Van Westendorp data set. Ships a tested calculator that works from a survey CSV."


Price Sensitivity Analysis

Purpose

Find the range of prices buyers see as acceptable for one product, from their own answers rather than from a guess. The method is the Van Westendorp Price Sensitivity Meter, presented by Peter van Westendorp at the ESOMAR Congress in 1976. Four open questions turn into four cumulative curves, and the crossings of those curves give a floor, a ceiling, and two reference points inside the range.

It measures price perception. It does not measure demand, units, or revenue, and its best known point, the optimal price point, means lowest price resistance. It does not mean most profit. Use it early, for a product with no settled price, as one input to a pricing decision alongside costs, margin, and competitor prices.

Workflow

  1. Fix the product description and the unit first. Write the exact description respondents will read: what the product is, what is included, and the unit every price refers to (one-time, per month, per seat per month). Every respondent prices the same thing or the answers cannot be pooled. Do not mention a current or planned price anywhere in the survey.
  1. Recruit real prospective buyers. Respondents must be people who could plausibly buy, sampled per segment you plan to report. Counts are per segment: under 50 valid rows is directional only, 100 or more valid rows per segment is the working floor, and 200 to 400 is the published guidance for a price that will actually ship. There is no sample size formula for this method, so state the valid n next to every result.
  1. Ask the four questions with exact wording, open numeric answers. Too expensive: at what price so expensive you would not consider buying it. Too cheap: at what price so low you would feel the quality could not be very good. Expensive: at what price starting to get expensive, not out of the question, but you would have to give some thought to buying it. Cheap: at what price a bargain, a great buy for the money. Show no price ladder and no list of candidate prices. If a scale is shown, record its range in the report because it anchors answers.
  1. Add the Newton-Miller-Smith questions only if reach or revenue estimates are wanted. At the price each respondent just called cheap, ask how likely they are to buy on a 5 point scale from definitely would buy to definitely would not buy. Ask the same at their expensive price. Skip the extension when only the acceptable range is needed.
  1. Clean before any curve is drawn. A valid row reads too cheap, then cheap, then expensive, then too expensive, in strict rising order, all present and positive. Drop rows that fail, count them by reason, and report the drop rate. A drop rate above about a fifth of rows points to an unclear description or unit, or to a category so new that respondents hold no stable ordering. Say which, and do not hide the rate.
  1. Build the four curves. At each price p: the too cheap curve is the share of valid respondents whose too cheap answer is at or above p, and the cheap curve is the share whose cheap answer is at or above p. Both fall as price rises. The expensive curve is the share whose expensive answer is at or below p, and the too expensive curve is the share whose too expensive answer is at or below p. Both rise. Draw straight segments between observed prices. Never smooth.
  1. Run the calculator. Use the bundled CLI (bin/psm.py) on the answers CSV with columns too_cheap, cheap, expensive, too_expensive, plus optional pi_cheap and pi_expensive and a segment column passed with --segment:

python3 bin/psm.py answers.csv --segment segment --curves-out curves.csv

It cleans the rows, builds the curves, finds every crossing by linear interpolation between observed prices, and prints warnings for small samples and high drop rates. Check the printed medians and drop counts against the raw file before reading any point.

  1. Read the crossings, and name the range definition. OPP is where the too cheap and too expensive curves cross. IPP is where the cheap and expensive curves cross. The acceptable range runs from PMC to PME, and two definitions circulate. The original definition crosses too cheap with the not cheap curve for PMC, and too expensive with the not expensive curve for PME. The narrower definition crosses too cheap with expensive for PMC, and cheap with too expensive for PME. The calculator reports both, labelled. Any chart or report that shows one range must say which definition produced it.
  1. Read the shape, not only the points. A wide range means low price sensitivity in this sample. A narrow range means buyers agree tightly and small price moves cross lines. Note steep stretches of any curve inside the range: those are price steps where perception changes fast. Check that OPP and IPP sit inside the range. When they do not, report that plainly instead of reordering the points to look tidy.
  1. If the extension ran, read reach and revenue as estimates. Per respondent, purchase probability is 0 at their too cheap and too expensive prices, the calibrated intent value at their cheap and expensive prices, and linear interpolation between those corners. The average across respondents is the reach curve; reach times price is the revenue index curve. The calculator uses the published calibration 0.70, 0.50, 0.30, 0.10, 0.00 for scale points 5 down to 1 and prints it. Name the calibration in the report. A different calibration moves the tops of both curves.
  1. Decide the price inside the range with evidence the survey does not contain. Bring unit costs, target margin, competitor prices, and channel fees to the choice. The survey rules out prices below the floor, where quality doubts grow, and above the ceiling, where rejection grows. It does not pick the profit best price between them.
  1. Keep real and simulated answers apart. Curves may only be built from answers real respondents gave. A practice run on invented or simulated rows is allowed for testing the pipeline, and every output from it must be labelled simulated in the title. Never pool simulated rows with real rows, and never present a simulated crossing as a finding.

Output Contract

A finished analysis contains:

Operating Rules

Full curve definitions, both range definitions with their sources, calibration variants, sample size guidance, and the limits discussion live in references/method-notes.md. A worked example data set with deliberate invalid rows and a segment split is in examples/sample-survey.csv.

Versions

v1.0.02026-10-23 · 0 installs · Ed25519-signed./install.sh price-sensitivity-analysis 1.0.0bundle (.zip)

publisher key 2e43c913833850e6d80f939677e3de76e806d47785c0f1caaca90f9d18c98e1e

Ratings

No ratings yet — be the first to rate it.