Analyze hypothetical purchase task data

Upload wide-format survey data, aggregate responses at each price, and fit the exponentiated demand model (Koffarnus et al., 2015), overall and by group. Everything runs in your browser: your data never leaves your computer, and your session is saved locally so you can pick up where you stopped.

1Upload data 2Clean & recode 3Map columns 4Results

Upload your survey data

Wide format: one row per respondent, one column per price point. Cells hold either a yes/no purchase response (e.g. 1/0, Yes/No) or a quantity the respondent would buy. Extra columns (ID, sex, site, condition…) are fine; you can use one for group comparisons. CSV or Excel (.xlsx).

Drop a CSV or Excel file here or click to browse
Nothing is uploaded to any server: parsing happens in your browser.

What your data should look like:

idsex050100200
R001FemaleYesYesYesNo
R002MaleYesYesNoNo
R003FemaleYesNoNoNo

One row per respondent, one column per price tested. Extra columns like “id” and “sex” are fine; only the columns that look like prices get used for fitting.

Clean & recode (optional)

Build new grouping variables or exclude rows. Your uploaded values are never modified: your recodes are applied on top of them and saved with your session. Blank cells in price columns are already treated as missing automatically.

New grouping variable

Create a new column by recoding an existing one: collapse categories (sites into regions) or bin numbers into ranges (age into age groups). The original column is kept; the new one appears as a grouping option in the next step.


Combine two experimental-group column sets

If you ran an experiment where two groups answered the same purchase-task questions, but your survey tool (e.g. Google Forms with branching) gave each group its own copy of those questions, your spreadsheet will have two separate sets of price columns — one filled in for respondents in Group A, the other for Group B, with the unused set blank for each person. This tool merges those two sets of columns into a single set of price columns, and adds one new column recording which group each respondent was in.

List each group's columns below in the order the price points were actually asked in your survey — line 1 across all three lists (Group A, Group B, and the new column names) should refer to the same price point: the version Group A saw, the version Group B saw, and what to call it once merged. Each respondent is placed in whichever group they actually answered. Your original columns are left untouched.



Exclude rows

Drop respondents from all analyses by a column value (e.g. a failed attention check).

Map your columns

Fits a separate curve for each group, alongside the overall (“All”) curve.

Columns

Price columns were auto-detected from the headers; check the assigned price values and fix any that are wrong.

Data preview

Results

⚙ Analysis settings
Applies to every curve. The default of 2 means demand can fall to about 1% of Q₀ at very high prices.
Applies when the data has a free (price-0) condition.
View options

Individual responses

Aggregated data

The aggregated values the curves are fitted to, at each price.

⬇ Export results

Figures

Data