ds@mcpanalytics.aiEmail your data and your question and get an answer about your own data, with the method shown.Email your data and question. Get an answer.

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.

The Discount Trap

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.

Data requirements

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:

  1. Your highest-revenue products. A small price change on a large product moves more dollars than the same change on a small one.
  2. 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.
  3. 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:

  1. 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.
  2. Upload to MCP Analytics. Create a dataset at account.mcpanalytics.ai and upload the CSV.
  3. Run the price elasticity module. Select the analysis and map your price column (Lineitem price) and quantity column (Lineitem quantity).
  4. 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.

Change prices in batches

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

What data do I need from Shopify to test price elasticity?

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.

What is a good price elasticity number for e-commerce?

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.

Can I test price elasticity without changing my prices?

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.

Which products should I test for price elasticity first?

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.

How accurate is price elasticity from Shopify order data?

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.