Synthetic Market Research: Finding the Perfect Price Point with AI Personas
Use psychologically-grounded AI personas from diverse demographics to predict price sensitivity — before spending a dime on real surveys.
Synthetic Market Research: Finding the Perfect Price Point with AI Personas
Use psychologically-grounded AI personas from diverse demographics to predict price sensitivity — before spending a dime on real surveys.
The $50,000 Question (Literally)
You’re about to launch a new product. You need to know what people will pay for it. Traditional market research gives you two options:
- Surveys — Cheap but slow. 2–4 weeks, sample bias, and people lie about what they’d pay.
- Focus Groups — Fast-ish but expensive. $5,000–$50,000 for 20–50 participants.
What if you could simulate 100+ demographically diverse respondents in under a minute, each with a psychologically grounded personality that influences their price sensitivity?
That’s exactly what we’ll build in this article using the Personaut PDK.
What You’ll Build
By the end of this article, you’ll have a complete pipeline that:
- Generates 100 demographically diverse AI personas (varying income, age, occupation, and personality)
- Runs a Van Westendorp Price Sensitivity survey across the entire population
- Analyzes results by demographic segment (income bracket, age group, occupation)
- Identifies the optimal price point, acceptable price range, and price ceiling
- Produces text-based visualizations of price distributions
All in a single Python script that runs in about 60 seconds.
The Approach: Van Westendorp Price Sensitivity
We’ll use the Van Westendorp Price Sensitivity Meter — a well-established pricing research methodology that asks four questions:
- Too Cheap — “At what price would you consider the product to be so cheap that you’d question its quality?”
- Cheap / Good Value — “At what price would you consider the product to be a good deal?”
- Expensive / Getting Pricey — “At what price would you start to think the product is getting expensive?”
- Too Expensive — “At what price would you consider the product too expensive to consider?”
The intersections of these curves reveal:
- Point of Marginal Cheapness (PMC) — Below this, people doubt quality
- Point of Marginal Expensiveness (PME) — Above this, you start losing buyers
- Optimal Price Point (OPP) — Where resistance to both cheap and expensive is balanced
- Indifference Price Point (IDP) — Where equal numbers find it cheap vs. expensive
Step 1: Defining Demographic Segments
Our population will span multiple demographic dimensions:
Income Brackets
BracketRangePersonality TendenciesLow Income$25K–$45KHigher price sensitivity, value-focusedMiddle Income$45K–$85KBalance of value and qualityUpper Middle$85K–$130KQuality-focused, brand-awareHigh Income$130K+Value quality and exclusivity, less price-sensitive
Age Groups
GroupRangeTendenciesGen Z18–28Tech-savvy, deal-seeking, social proof drivenMillennial29–43Experience-oriented, willing to pay for convenienceGen X44–59Practical, research-driven, quality-consciousBoomer60–75Brand-loyal, established buying patterns
Occupations
Tech workers, healthcare, education, finance, creative arts, service industry, retired, and students — each with distinct spending psychology.
Step 2: Generating the Population
Here’s how personality traits map to price sensitivity:
import personaut
# A budget-conscious student
student = personaut.create_individual(
name="Mia Chen",
traits={
"warmth": 0.6,
"reasoning": 0.7, # Analytical about purchases
"emotional_stability": 0.5, # Some purchase anxiety
"openness_to_change": 0.8, # Open to new products
"sensitivity": 0.7, # Considers impact carefully
},
emotional_state={
"anxious": 0.4, # Budget pressure
"creative": 0.5, # Interested in innovative products
"hopeful": 0.3, # Optimistic about value
},
metadata={
"age": 22,
"income_bracket": "low",
"household_income": 32000,
"occupation": "student",
"education": "undergraduate",
}
)
The key insight: personality traits directly influence how each persona responds to pricing questions. High reasoning → more analytical price evaluation. Low emotional_stability → more price anxiety. High openness_to_change → more willing to try new products at higher prices.
Step 3: Running the Van Westendorp Survey
from personaut import create_simulation, SURVEY, create_situation, TEXT_MESSAGE
# Define the survey context
situation = create_situation(
modality=TEXT_MESSAGE,
description="An online pricing research survey for a new AI-powered "
"personal finance app called 'WealthPilot' that provides automated "
"budgeting, investment suggestions, and spending insights.",
location="Online survey platform",
context={
"product": "WealthPilot — AI Personal Finance App",
"product_description": "Monthly subscription app that analyzes your "
"spending, creates personalized budgets, suggests investments, and "
"provides weekly financial health reports.",
"competitors": "Mint (free), YNAB ($14.99/mo), Copilot ($10.99/mo)",
"purpose": "Pricing research — Van Westendorp analysis",
},
)
# Van Westendorp questions
questions = [
"At what monthly price would you consider WealthPilot so inexpensive "
"that you would question its quality? ($ amount)",
"At what monthly price would you consider WealthPilot a good deal — "
"worth the money? ($ amount)",
"At what monthly price would you consider WealthPilot starting to get "
"expensive, but you'd still consider it? ($ amount)",
"At what monthly price would you consider WealthPilot too expensive "
"to ever purchase? ($ amount)",
]
# Run the survey for each persona
sim = create_simulation(
situation=situation,
individuals=[student],
type=SURVEY,
context={"questions": questions},
)
results = sim.run(num=1, dir="./output")
Step 4: Analyzing by Segment
The real power comes from segmenting results by demographic:
# After running all surveys...
for bracket in ["low", "middle", "upper_middle", "high"]:
segment = [r for r in all_results if r["income_bracket"] == bracket]
avg_cheap = mean([r["good_value"] for r in segment])
avg_expensive = mean([r["too_expensive"] for r in segment])
print(f" {bracket:15s}: sweet spot ${avg_cheap:.0f}-${avg_expensive:.0f}")
This reveals questions like:
- “Is there a price that works for BOTH Gen Z students AND Gen X professionals?”
- “How much revenue do we leave on the table by pricing for the median instead of segmenting?”
- “Which demographic is most price-elastic?”
The Complete Script
The full script ([pricing_survey.py](https://github.com/empadev64/pdk-examples/tree/main/pricing-survey)) generates 100 personas across all demographics, runs the Van Westendorp survey, and produces:
- Segment Analysis — Pricing breakdown by income, age, and occupation
- Van Westendorp Curves — Text-based visualization of the four price curves
- Optimal Price Range — PMC, OPP, IDP, and PME calculations
- Revenue Optimization — Projected adoption rates at different price points
- Strategic Recommendations — Data-driven pricing guidance
Sample Output
VAN WESTENDORP PRICE ANALYSIS
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
Point of Marginal Cheapness (PMC): $ 4.50
Optimal Price Point (OPP): $ 8.75
Indifference Price Point (IDP): $ 11.00
Point of Marginal Expensiveness: $ 18.50
Recommended Range: $8.75 — $11.00/month
📈 REVENUE OPTIMIZATION
At $7.99/mo → 78% adoption → $6.23 effective revenue
At $9.99/mo → 65% adoption → $6.49 effective revenue ← OPTIMAL
At $12.99/mo → 42% adoption → $5.46 effective revenue
At $14.99/mo → 28% adoption → $4.20 effective revenue
Key Takeaways
- Demographics shape price perception — a $10/month subscription feels very different to a student vs. a tech executive
- Personality amplifies demographics — a high-reasoning, low-emotional-stability person in ANY income bracket will be more price-sensitive
- Segmented analysis reveals hidden revenue — the “average optimal price” often isn’t optimal for any individual segment
- Speed matters — running 100 surveys in 60 seconds lets you iterate on product positioning, feature bundles, and pricing tiers rapidly
What’s Different From Traditional Surveys
DimensionTraditional SurveyPersonaut SimulationTime2–4 weeks< 2 minutesCost$5K–$50KAPI costs onlySample Size50–500UnlimitedDemographic ControlLimitedExact specificationPersonality ModelingNone17-factor psychological modelReproducibilityLow100% (seeded randomization)Emotional ContextUncontrolledPrecisely modeled
Caveat: Synthetic research supplements but doesn’t replace real user feedback. Use it for rapid hypothesis generation and range-finding, then validate your top 2–3 pricing options with real users.
Run It Yourself
pip install personaut
python pricing_survey.py
Full source code: github.com/empadev64/pdk-examples/pricing-survey
메타데이터
- post_id
- e330960fc6eb
- slug
- synthetic-market-research-finding-the-perfect-price-point-with-ai-personas-e330960fc6eb
- url
- https://medium.com/@empadev64/synthetic-market-research-finding-the-perfect-price-point-with-ai-personas-e330960fc6eb
- canonical_url
- https://medium.com/@empadev64/synthetic-market-research-finding-the-perfect-price-point-with-ai-personas-e330960fc6eb
- author_url
- https://medium.com/@empadev64
- status
- ok
- fetched_at
- 2026-07-13 06:23:13