Shopify Price Elasticity: How to Test Whether Your Prices Are Right
By MCP Analytics Team | Published , updated
Ask a Shopify store owner how they set their prices and you will hear some version of: "I looked at what competitors charge and picked something in the middle." Or: "I doubled my cost." Or the most honest answer: "I guessed."
Pricing can affect profit, but the result depends on the store and on how buyers respond. Change a price and you might lose customers. Keep it the same and you might be leaving money on the table. Without data, there is no way to know which risk is greater. That is where price elasticity analysis comes in: it uses order data to estimate how sensitive buyers are to a price change.
Worked Example (Simulated): Two Prices, Units and Revenue
Question: In this simulated test, what happened to daily unit sales and revenue when the price rose from $10.00 to $11.00?
Inputs: Simulated data, seed 41. The script draws daily unit sales at each price, 400 days per price, and needs numpy. The script sets the elasticity at -0.8, so inelastic demand and a revenue gain at the higher price are built in, not found. This is a teaching example, not store data.
Method: Find the mean units sold per day at each price. Estimate elasticity as the log change in mean units divided by the log change in price. Multiply price by mean units to compare daily revenue.
import numpy as np
# Simulated daily unit sales at two prices.
seed = 41
rng = np.random.default_rng(seed)
price_low = 10.00
price_high = 11.00
n_days_per_price = 400
true_elasticity = -0.8
base_mean_units = 120.0
low_units = rng.poisson(base_mean_units, size=n_days_per_price)
high_mean = base_mean_units * (price_high / price_low) ** true_elasticity
high_units = rng.poisson(high_mean, size=n_days_per_price)
mean_low = low_units.mean()
mean_high = high_units.mean()
elasticity = np.log(mean_high / mean_low) / np.log(price_high / price_low)
revenue_low = price_low * mean_low
revenue_high = price_high * mean_high
print(f"Seed: {seed}")
print(f"Set elasticity for simulation: {true_elasticity:.1f}")
print(f"Days at ${price_low:.2f}: {n_days_per_price}; "
f"mean units/day: {mean_low:.2f}; revenue/day: ${revenue_low:.2f}")
print(f"Days at ${price_high:.2f}: {n_days_per_price}; "
f"mean units/day: {mean_high:.2f}; revenue/day: ${revenue_high:.2f}")
print(f"Estimated elasticity: {elasticity:.3f}")
Printed output:
Seed: 41
Set elasticity for simulation: -0.8
Days at $10.00: 400; mean units/day: 120.48; revenue/day: $1204.83
Days at $11.00: 400; mean units/day: 111.12; revenue/day: $1222.35
Estimated elasticity: -0.849
Result: The script sets the elasticity at -0.8. The run recovers -0.849. Mean sales were 120.48 units a day at $10.00 and 111.12 at $11.00. Mean daily revenue was $1204.83 and $1222.35, in that order. In this run, the higher price came with lower unit sales and higher revenue, because the set elasticity is below 1 in size. The revenue gap is small.
Limit: The data are simulated and hold other causes of sales change out of the example. Real order records can mix price effects with season, traffic, and other changes.
What Price Elasticity Means for Your Store
Price elasticity of demand measures how much the quantity sold changes when price changes. The formula is simple:
Price Elasticity = % Change in Quantity Sold / % Change in Price
To see how much your own demand drops when the price rises, try the free price elasticity tool.
If you raise prices 10% and sales volume drops 5%, your elasticity is -0.5. If sales volume drops 15%, your elasticity is -1.5. The number is usually negative, because a higher price tends to bring lower volume. When an elasticity is below 1 in size (for example -0.5), volume falls by less than price rises, so revenue rises. When it is above 1 in size, volume falls by more than price rises, so revenue falls.
Questions to Ask About Your Prices
You do not need a formal elasticity analysis to start asking whether your pricing is off. These questions point to places to look in your Shopify data:
1. Is your conversion rate unusually high?
Store-wide conversion alone cannot show that prices are too low. Use a price test or other evidence that can separate price effects from other changes.
2. Do you ever get price complaints?
If no customers mention price in support tickets, reviews, or abandoned cart surveys, that may mean prices are not near the upper limit of what buyers will pay. It may also mean you have little feedback. Look at what people say before you decide.
3. Do discount codes change behavior?
If a discount code does not noticeably raise order volume, the discount may be giving away margin to customers who would have paid full price. Compare periods with and without the discount before you conclude that.
Many Shopify sellers run perpetual discounts (welcome10, friends20) without tracking whether they change purchase behavior. If conversion does not change during promotions, you may be training customers to wait for discounts on products they would buy anyway. Pull the data before pulling the discount.
4. Are your best-sellers also your lowest-margin products?
When your top-selling products by volume are your lowest-margin items, price may be a main driver of those sales. That would point to more elastic demand there. A price test on those items can check it.
5. Do competitors sell similar products at higher prices?
If competitors sustain higher prices without obviously better products, there may be room between your price and theirs, or their brand may carry a premium. A price test can show how your own buyers respond.
How to Use Your Shopify Data for Price Elasticity Testing
You do not have to run a designed price experiment to estimate elasticity. Your existing order data already contains some price variation. There are three sources of it in your Shopify orders CSV:
Source 1: Historical Price Changes
If you have ever adjusted a product's price, your order data contains two price points: orders before the change at price A, orders after at price B. Compare the sales velocity (units per day) at each price. Season, traffic and other changes can move sales as well, so account for them.
This works best when the price change was large enough to matter and when you have enough orders at both prices.
Source 2: Discount Code Variation
Every discount code creates an effective price reduction. If your product lists at $49 and a customer uses a 15% discount code, they paid an effective price of $41.65. A raw comparison of discount and full-price orders may reflect differences between the groups as well as price. Treat it as a rough signal. To estimate a price effect, use a designed test or an analysis that accounts for measured group differences and time changes.
Source 3: Cross-Variant Pricing
If you sell the same product in different sizes, packages, or tiers at different prices, the sales ratio between variants gives a signal about price sensitivity. A 16oz candle at $24 and a 32oz candle at $38 (effectively $19 per 16oz equivalent) show whether customers trade up when the per-unit price drops. This is imperfect because larger sizes attract different use cases.
Order counts and price points alone do not make an estimate reliable. Order data can mix price effects with seasonal changes. If the data cover enough seasonal cycles, use a seasonal model with calendar-period terms. Otherwise, collect data over a longer span that covers the cycle of interest. The free tool needs at least 30 usable rows and at least 3 distinct prices to run.
How to Read Your Elasticity Results
The free tool fits a log-log regression of units on price. It reports one elasticity with a 95% interval, says whether demand looks elastic or inelastic, and gives the direction revenue would move, read as an association because prices were not randomly assigned.
Look at the interval, not only the single number. If the interval spans -1.0, you cannot tell whether a price increase would raise or lower revenue. In that case, test a small, controlled price change on that product, measure the actual response, and then decide on a larger change.
Which Products to Analyze First
Do not try to optimize your entire catalog at once. Start with categories where the analysis may pay off most:
- Your highest-revenue products. A small price change on a large product moves more dollars than the same change on a small one.
- Lowest-margin products with decent volume. If demand turns out to be inelastic, a price increase could improve margin on a product that earns little today.
- Products with the most discount usage. They have the most price variation in your data, which gives the analysis more to work with. They are also where you may be giving away margin.
Running Price Elasticity Analysis with MCP Analytics
The process uses the same Shopify orders export you already have:
- Export your orders. Shopify Admin, Orders, Export. Choose a date range that covers the prices you want to compare. Download your
orders_export_1.csv. - Upload to MCP Analytics. Create a dataset at account.mcpanalytics.ai and upload the CSV.
- Run the price elasticity module. Select the analysis and map your price column (
Lineitem price) and quantity column (Lineitem quantity). - Review the results. The free tool fits a log-log regression of units on price. It reports one elasticity with a 95% interval, says whether demand looks elastic or inelastic, and gives the direction revenue would move, read as an association because prices were not randomly assigned.
From Elasticity to Pricing Decisions: A Framework
Knowing your elasticity is step one. Turning it into a pricing change requires a decision framework that accounts for competitive dynamics, brand positioning, and risk tolerance.
For products that appear inelastic
Consider a small price test. Track units and revenue over a period that can show normal changes in demand. Compare the result with a similar group or time span, and do not assume that one result will hold for every product or season.
For products that appear elastic
Do not lower prices reflexively. Instead, look at ways to reduce the elasticity itself. Bundle the product with complementary items, which are harder to price-compare. Add exclusive variants or customization options. Build loyalty programs that create switching costs.
For borderline products
Test before committing. Change the price on this product only, wait for a period that covers normal demand swings, and compare the actual volume change against what the elasticity estimate predicted. If volume drops less than expected, the product may be more inelastic than the data suggested. If it drops more, revert and focus elsewhere.
Even if the analysis suggests many products are underpriced, change a few at a time. This lets you isolate the effect of each change, limits downside risk if an estimate is wrong, and avoids the look of a store-wide price hike. Stagger your changes and measure each one.
Your turn
Bring your own data and the question you actually need answered.
MCP AnalyticsData science by email Send us your data and your question, and we will reply. ds@mcpanalytics.ai
Frequently Asked Questions
You need your Shopify orders export CSV (orders_export_1.csv) covering the period you want to study. The key columns are Lineitem name (product), Lineitem price (price charged), Lineitem quantity (units sold), and Paid at (date). If you have changed prices during this period, the variation gives you data points to estimate elasticity. If prices have been constant, discount codes can add some price variation, but read that estimate with care.
Elasticity is usually negative. An elasticity of -0.5 means a 10% price increase reduces volume by 5%. That is inelastic, and total revenue rises. An elasticity of -1.0 is unit elastic, and revenue stays about flat. Below -1.0, volume falls by more than price rises and revenue falls. What is typical depends on the product and the market, so judge your own number against your own data.
You can get a rough signal. If you have run discounts or promotions, those create effective price variation in your history, and variants at different prices add more. These comparisons can mix price effects with other differences, so treat them as a signal, not proof. A designed price test gives a cleaner answer.
Consider your highest-revenue products, your lowest-margin products with decent volume, and products with the most discount usage. Avoid products with very few orders, since the estimate will be wide.
Estimates from observational data are directional, not precise. They give a rough idea of whether demand looks more or less elastic. For a cleaner answer, run a designed price test. The free tool reports a 95% interval with its estimate so you can see how wide the uncertainty is. More orders and more price variation tend to give tighter intervals.
To estimate elasticity from past sales rather than a live test, see the price elasticity guide.