sapien
← All articlesJournal8 min read

Van Westendorp Pricing: Questions and Worked Example

Use Van Westendorp’s four questions to find a plausible price range. Learn how the records, curve directions and repeated equalities shape the next price test.

Solid and outlined people considering two ivory multipacks with tea-leaf and sun reliefs on connected sculptural terrain.

Van Westendorp pricing research uses four questions about cheapness and expensiveness to find a plausible price range for a defined offer. Use that range to choose prices for a later buying test. This guide shows the questions, checks the records and explains how curve definitions and equalities affect the result.

Example: four price questions for a tea pack

In this hypothetical four-can tea example, the card reads: “Four 250 ml cans of sparkling tea, one-off grocery purchase, total pack price including tax.” Use that same complete offer and ask for a monetary amount for each question:

  1. At what price would this offer seem so inexpensive that you would doubt its quality?
  2. At what price would it seem good value for the money?
  3. At what price would it start feeling expensive, although you might still consider it?
  4. At what price would it be too expensive for you to consider?

Use the same currency and price unit. Let people record that the offer is irrelevant or not described well enough. Showing a preferred price range first can teach the answer you wanted to learn.

The four questions intentionally distinguish a low price that creates quality doubt from good value, and an expensive but still imaginable price from outright rejection. Treating all four as “what would you pay?” erases the distinction the method is designed to explore.

Test what the questions mean before analyzing amounts. Someone for whom tea is irrelevant needs a way to say so without a forced threshold. Clarify quantity consistently for everyone. A suggested range or visibly preferred price can anchor all four answers.

Count which records enter each curve

For this dataset, require too_cheap ≤ cheap ≤ expensive ≤ too_expensive. Flag incomplete or contradictory rows for review. State whether you correct a verified data-entry error, keep the response or exclude it; report the effect rather than quietly cleaning away inconvenient answers.

Copy the complete threshold data and reproducible analysis below. Save them in the same folder using the supplied filenames. Running python3 vw-analysis.py beside the CSV prints a price-grid table and the first intersection under the stated convention.

The ordering rule is a convention for this dataset, not a diagnosis. An out-of-order row might reflect confused pack and can prices, reversed fields or an ambiguous question. Investigate the original answer before correcting or excluding it.

Show how many records enter each curve. If analysis requires all four fields, report excluded cases and why they were lost. If partial curves use different totals, say so. A crossing between differently covered groups may reflect missing answers as well as perceptions.

Do not “repair” a response solely to make the expected order hold. Correct a verified entry error under a consistent rule; otherwise explain retention or exclusion and whether it changes the candidate interval. The reader should be able to reproduce the rule from the saved file.

How the curves define a crossing

Intersection

Details

Marginal cheapness

Curves compared: Too cheap and expensive

Interpretation: Lower perception boundary

Marginal expensiveness

Curves compared: Cheap and too expensive

Interpretation: Upper perception boundary

Indifference

Curves compared: Cheap and expensive

Interpretation: Balance of bargain and expensive judgments

Often called “optimal”

Curves compared: Too cheap and too expensive

Interpretation: Balance of extreme price objections

At a whole-dollar price p, the two cheapness curves count thresholds at or above p. The expensive and too-expensive curves count thresholds at or below p. Divide by the ten complete rows. These opposite directions produce the crossings; they are not four independently observed price tests.

Four curves on a shared price grid

Both tables show shares of the ten complete threshold records, in percent, for the four-can pack. Prices are whole-pack USD amounts. Equality is included; the first whole-dollar equality defines each named crossing.

Pack price, USD

Details

6

Too cheap, %: 50

Good value, %: 70

7

Too cheap, %: 40

Good value, %: 60

8

Too cheap, %: 30

Good value, %: 50

9

Too cheap, %: 30

Good value, %: 40

10

Too cheap, %: 20

Good value, %: 40

11

Too cheap, %: 20

Good value, %: 30

12

Too cheap, %: 10

Good value, %: 30

13

Too cheap, %: 10

Good value, %: 20

Pack price, USD

Details

6

Expensive, %: 30

Too expensive, %: 10

7

Expensive, %: 30

Too expensive, %: 20

8

Expensive, %: 30

Too expensive, %: 30

9

Expensive, %: 40

Too expensive, %: 30

10

Expensive, %: 40

Too expensive, %: 30

11

Expensive, %: 50

Too expensive, %: 30

12

Expensive, %: 60

Too expensive, %: 40

13

Expensive, %: 60

Too expensive, %: 40

These are computed grid points, not independently observed price tests. The $8–$11 interval supplies price-perception context.

At $8, three of ten too-cheap thresholds are at or above $8 and three expensive thresholds are at or below it. Their equality gives the lower perception boundary under the first-grid-equality rule. At $11, three good-value thresholds remain at or above $11 and three too-expensive thresholds are at or below it, giving the upper boundary.

This calculation includes answers equal to the grid price in both curve directions. Another implementation might exclude equality, use a different grid or estimate a crossing between grid points. Those choices can change the apparent crossing for the same rows. Check definitions before treating it as a change in consumers.

The calculated interval is $8–$11 for this four-can pack. The six-pack in our pricing guide needs its own price evidence. A table’s pack size, tax treatment and channel matter as much as its column labels.

Several grid prices can share a crossing

Cheap and expensive curves are equal at $9 and $10. Too cheap and too expensive are equal at $8 and $9. The script reports every equality and selects the first whole-dollar point for its named crossing. A label that prints one amount does not erase the second equality.

The commonly named “optimal price point” balances the two extreme price objections. It does not find the highest a purchase probability, revenue or contribution. The perception data do not contain those objectives. A mathematically exact intersection can still leave the business decision open.

When the difference between two curves changes sign between whole-dollar points, interpolation estimates a crossing between them. It adds no respondents or observed responses at that calculated decimal price. When several integer points are equal, reporting cents would make the exercise look more precise without supplying more evidence.

Use the curve shape as a diagnostic as well as a range. A low-price quality objection can suggest that presentation or quality cues are unclear. An early expensive perception can prompt investigation of the alternative buyers compare with. Follow those interpretations to the original answers before revising the offer.

What if $8–$11 does not work for the business?

Check feasible prices and costs for this pack. If no amount in the perception range works commercially, averaging the boundaries cannot fix it. You may need to change the quantity, channel, benefit or cost structure.

Separate “buyers understood the offer and find it expensive” from “buyers imagined less value than the offer supplies.” In the latter case, revise truthful inclusions or explanation and test comprehension. In the former, consider a genuinely different offer or a different reachable audience. Research cannot make a costly pack economical by renaming an intersection.

If viable candidates exist, take them into concrete-price testing. Select amounts the business can implement, define the outcome and keep the complete offer. The next study asks about response to those displayed amounts; the perception exercise has already supplied the earlier context.

Compare price perceptions within relevant audiences when the launch decision depends on their difference. Use appropriate bases and the same card. A single pooled crossing may conceal one group for whom the occasion is valuable and another for whom the pack is irrelevant. Do not manufacture segment curves from this ten-row file, which supplies no audience records.

The useful output is a candidate interval and next test

A finished report should state the offer, question wording, valid-answer count for each curve, curve directions, equality convention, all relevant crossings and the action those findings support. For this example, the action is to investigate feasible prices in the $8–$11 neighborhood, keeping the repeated equalities as a reason to avoid overprecision.

The report can also legitimately say “revise the offer before testing a ladder.” That is a completed decision when costs rule out the entire interval. It is more useful than forcing a final price from data about perceptions.

Use Gabor-Granger for a planned repeated-price ladder, or monadic pricing for independent cells, when you need buying responses at feasible displayed amounts. These answer a later question than Van Westendorp’s price perceptions. Use a suitable market pilot for actual buying. If thresholds come from a simulated audience, show their source and validation for the task. The calculation does not change the evidence behind the inputs.

Complete threshold records and analysis

Save the CSV as vw-data.csv and the Python code as vw-analysis.py in the same folder. The script retains the ordering check, inclusive curve directions, whole-dollar grid, all equality points and sign-change interpolation. Its labels summarize perceptions under those conventions.

All ten complete threshold records

response_id,too_cheap,cheap,expensive,too_expensive,evidence_type
D01,1,2,3,5,fictional_teaching_data
D02,2,3,5,7,fictional_teaching_data
D03,3,4,6,8,fictional_teaching_data
D04,4,6,9,12,fictional_teaching_data
D05,5,7,11,14,fictional_teaching_data
D06,6,8,12,16,fictional_teaching_data
D07,7,10,14,18,fictional_teaching_data
D08,9,12,16,20,fictional_teaching_data
D09,11,14,18,23,fictional_teaching_data
D10,13,16,20,26,fictional_teaching_data

Complete four-curve analysis

"""Reproducible fictional VW perception example; not demand/profit estimation."""
import csv
from pathlib import Path
rows=list(csv.DictReader(Path(__file__).with_name('vw-data.csv').open()))
fields=['too_cheap','cheap','expensive','too_expensive']
for r in rows:
    v=[float(r[k]) for k in fields]
    if sorted(v)!=v: raise ValueError('Threshold order invalid: '+r['response_id'])
n=len(rows)
curves=[]
for price in range(0,31):
    c={'price':price}
    for key in fields:
        if key in fields[:2]: count=sum(float(r[key])>=price for r in rows)
        else: count=sum(float(r[key])<=price for r in rows)
        c[key]=count/n
    curves.append(c)
print('Fictional teaching data. Equality included; whole-dollar grid. No sales forecast.')
print('price,too_cheap,cheap,expensive,too_expensive')
for c in curves: print(','.join(str(c[k]) for k in ['price']+fields))
for label,a,b in [('PMC','too_cheap','expensive'),('PME','cheap','too_expensive'),('IPP','cheap','expensive'),('OPP','too_cheap','too_expensive')]:
    equal=[c['price'] for c in curves if abs(c[a]-c[b])<1e-12]
    crossings=[]
    for left,right in zip(curves,curves[1:]):
        dl=left[a]-left[b];dr=right[a]-right[b]
        if dl*dr<0: crossings.append(left['price']+(right['price']-left['price'])*dl/(dl-dr))
    candidates=sorted(set(equal+crossings))
    print(label, 'first grid equality/interpolated crossing:', candidates[0] if candidates else 'none', 'all equality points:',equal,'sign-change crossings:',crossings)

Further reading

The Conjointly four-question explanation provides method context for the price-perception questions.

For the four-can pack, the next study should compare feasible prices or a revised offer when $8–$11 doesn’t cover costs. In a Sapien study discussion, agree which buyer reaction would change that choice and what the simulated evidence can support.

← Back to all articles