Price elasticity of demand: how to estimate it and find the profit-maximizing price

Price elasticity tells you how much demand moves when price does. Estimated carefully, it turns into the price that maximizes contribution; estimated carelessly, it mostly measures how your pricing team reacts to demand.

Mike Taylor By Mike Taylor · Updated · 9 min read

Price elasticity of demand is the percentage change in the quantity people buy divided by the percentage change in price, so an elasticity of −2 means a 1 percent price rise cuts unit sales by about 2 percent. When the number is below −1, demand is “elastic” and a price rise loses more volume than it gains in price; between −1 and 0 it’s “inelastic” and a price rise increases revenue. For marketers the useful part is what comes next: combined with your unit cost, the elasticity tells you the price that maximizes contribution, and it’s one of the levers a marketing mix model has to account for before it can credit advertising fairly.

Price is the lever marketers most often leave to someone else, which is a shame, because it usually moves profit faster than any media reallocation. The early Vexpower simulator course “What price maximizes profit?” started from the observation that most businesses guess at pricing and move on. This page takes the marketing mix angle, from estimating own-price elasticity with a log-log model to the reasons most naive estimates come out wrong.

The price elasticity of demand formula

The definition is a ratio of percentage changes:

e=%ΔQ%ΔP=∂Q∂P⋅PQe = \frac{\%\Delta Q}{\%\Delta P} = \frac{\partial Q}{\partial P} \cdot \frac{P}{Q}

With only two observations (say price went from £20 to £22 and weekly units from 1,500 to 1,300) you can use the midpoint, or “arc”, version, which divides each change by the average of the two values so the answer doesn’t depend on which direction you went. Here that’s −200 ÷ 1,400 = −14.3 percent of quantity against +2 ÷ 21 = +9.5 percent of price, an elasticity of about −1.5. It’s a fine back-of-the-envelope number, but it treats everything else that changed between those two weeks (a holiday, a competitor’s sale, a burst of advertising) as if it were the price effect.

This page is about own-price elasticity (how a product’s demand responds to its own price). Cross-price elasticity, how your demand responds to a competitor’s price, matters too, and in practice it’s the main reason to include competitor prices as controls. As a rough anchor for what “normal” looks like, Gerard Tellis’s 1988 meta-analysis of 367 brand-level estimates found an average price elasticity of −1.76, though individual products range from near zero to well below −3, so it’s no substitute for estimating your own.

Estimating elasticity with a log-log model

The standard way to estimate elasticity from many weeks of data is a log-log model: regress the natural log of quantity on the natural log of price.

ln⁡Qt=a+eln⁡Pt+controlst+εt\ln Q_t = a + e \ln P_t + \text{controls}_t + \varepsilon_t

The slope ee is the elasticity directly, because a small change in a log is approximately a percentage change. That’s the whole appeal: no conversion step, and the model assumes a constant elasticity, meaning a 1 percent price rise costs the same percentage of volume whether you start at £18 or £28. Undoing the logs gives the demand curve Q=APeQ = A P^{e}, which bends the way real demand curves do. (If you log only the outcome and keep price in levels, you get a log-linear model, where the elasticity changes with the price level instead.)

The tool below fits exactly this regression on whatever price and quantity pairs you give it. The default data is 26 synthetic weeks generated from a curve with a known elasticity plus noise, which is a useful way to see how much a clean-looking dataset can still leave uncertain.

Interactive
Estimate price elasticity and the profit-maximizing price

Paste weekly price and quantity pairs (or edit the example), add your unit cost, and the tool fits a log-log demand model, reports the elasticity with a confidence interval, and finds the price that maximizes contribution.

Elasticity (95% CI)
−2.67
−2.97 to −2.37
Fit
R² 0.93
26 weeks
Profit-maximizing price
22.40
Contribution vs current price
+3%

Demand curve: quantity against price
Contribution per period at each price (before fixed costs). Shaded: prices you observed.
Default data is synthetic: 26 weeks generated from a constant-elasticity demand curve with noise. The fit is ordinary least squares on ln(quantity) against ln(price), with nothing else controlled for, so it inherits every confounder in your data (seasonality, promotions, advertising, competitor prices). Optimal price uses P* = MC × e ÷ (1 + e), valid only when e is below −1 and only within the price range you observed.

On the default data the estimate is about −2.67, with a 95 percent confidence interval of roughly −2.97 to −2.37. That’s fairly tight, because the price varied a lot (from £17.50 to £29.50) and nothing else was moving in the synthetic data. In real data both conditions are rare. Switch the chart to log-log axes and the curve becomes a straight line, which is a quick visual check that the constant-elasticity form fits: if your points bend away from the line at one end, a single elasticity is hiding a change in behavior.

From elasticity to the profit-maximizing price

Once you have an elasticity and a unit cost, finding the best price is a short derivation. Contribution is (P−MC)×Q(P)(P - MC) \times Q(P), where MC is the marginal (variable) cost of one more unit. Setting its derivative to zero and using the definition of elasticity gives the markup rule:

P∗=MC⋅e1+eequivalentlyP∗−MCP∗=−1eP^{*} = MC \cdot \frac{e}{1 + e} \qquad \text{equivalently} \qquad \frac{P^{*} - MC}{P^{*}} = -\frac{1}{e}

The second form is the Lerner rule from economics: at the profit-maximizing price, your percentage margin equals minus one over the elasticity. It only works when e<−1e < -1. To check it with numbers, take e = −2: the formula gives P* = MC × (−2 ÷ −1) = 2 × MC, and the margin (2MC − MC) ÷ 2MC = 50 percent, which matches −1 ÷ −2. The more elastic the demand, the thinner the optimal margin:

Elasticity eOptimal price as a multiple of unit costOptimal margin (P − MC) / P
−1.53.0 ×67%
−22.0 ×50%
−31.5 ×33%
−41.33 ×25%
−51.25 ×20%

In the widget’s default case, with a unit cost of £14 and e = −2.67, the optimum is about £22.40, so the current £24 is slightly too high. However, look at the contribution curve: it’s very flat at the top, and moving from £24 to £22.40 improves contribution by only about 1 percent on the fitted curve. Across the confidence interval the optimal price runs from roughly £21.10 to £24.25, which includes the current price. That’s the most common honest answer from an elasticity analysis: the data says you’re in the right neighborhood, and the next step is a controlled price test rather than a price change.

If your estimate comes out between −1 and 0, the formula has no answer, and the constant-elasticity model is telling you to keep raising price forever. That can’t be true outside the range you observed. Inelastic demand at current prices is a good reason to test a higher price, and the curve will eventually bend (customers switch, trade down or stop buying), but your historical data can’t tell you where.

Price and promotion in a marketing mix model

In a marketing mix model, price is not a nuisance variable to tidy away. It is often the single biggest driver of week-to-week sales after seasonality, and it’s frequently correlated with advertising, because brands tend to advertise their promotions. If you leave price out, the model has no choice but to credit the promotional weeks’ sales to whatever media ran alongside them, which inflates those channels’ returns (the media mix modeling page has a widget that shows this bias directly). Google’s Meridian documentation, for instance, treats price changes and promotions as “non-media treatments”, with their own estimated causal effects, rather than as controls whose coefficients you ignore.

The usual way to include price in an MMM is to put the log of price (or a price index relative to a reference) into the model, so its coefficient reads as an elasticity even when the media terms use adstock and saturation transforms. Where your outcome is units rather than revenue this works directly. Where the outcome is revenue, remember that revenue already contains price, so the “elasticity” on log price in a log-revenue model is one plus the unit elasticity. That’s an easy mistake to make when moving between the two, and it’s another reason the measurement plan should define the outcome in full.

Promotional elasticity is not base price elasticity

A single price variable mixes two different customer responses. A permanent change in the regular price is what the profit-maximizing price calculation needs. A temporary discount triggers extra behavior on top: customers stock up, switch from competitors for the week, bring purchases forward, and then buy less in the weeks after (the post-promotion dip). In my experience the short-term response to a discount is usually much larger in magnitude than the response to the same percentage change in the regular price, so a model that estimates one elasticity from both will overstate how much volume a permanent price cut would win.

The practical fix is to split price into two variables: the base (regular) price, and the promotional depth (the percentage discount off base, or a dummy for promotion weeks). Add a lag of the promotion variable to catch the post-promotion dip, and check the baseline isn’t absorbing promotions that weren’t coded. The base price coefficient is the one to feed into the optimal-price formula, while the promotional coefficient (net of the dip) tells you whether promotions pay for their discount.

Why most price elasticity estimates are wrong

The deepest problem with estimating elasticity from historical data is that prices aren’t set at random. They’re set by people who are watching demand. If a business cuts prices when sales are weak and raises them when demand is strong, high prices coincide with high sales, and the regression slope is pulled towards zero or even turns positive. Economists call this endogenous pricing, and it’s a textbook case of the confounding problem: the thing driving both price and sales (demand) isn’t in the model. If the widget gives you a positive or near-zero elasticity on your own data, this is the first explanation to check, before concluding customers don’t care about price.

The other common problems are close cousins. Promotions often coincide with advertising, features and in-store displays, so the price coefficient picks up their effect. Seasonality moves both price and demand (retailers discount after peak season), so without seasonal controls the slope mixes the two. Stock-outs cap sales in exactly the weeks demand was highest, censoring the data. Competitor prices shift your demand curve without changing your price. Aggregating many products with different prices into one series can create a relationship that no single product has. And any price outside the range you observed is an extrapolation of the functional form, not evidence.

There are three main ways to get a more trustworthy number, and they’re worth trying in this order. First, control for what you can (seasonality, promotions, advertising, competitor prices, distribution), which is what a well-specified MMM or econometric model does anyway. Second, use variation in price that wasn’t caused by demand, such as cost-driven price changes (a supplier price rise passed on to customers) used as an instrument, which is a standard technique in causal inference. Third, and best, run a price experiment: randomize prices across regions, stores or customer cohorts and compare, ideally with a difference-in-differences read to account for pre-existing gaps. An experiment answers the question directly, at the price points you actually care about, which is exactly what the flat-topped profit curve says you need.

PriceQuantityLow-demand weeksHigh-demand weeksTrue demand curveNaive fit: almost flatPrice cut when demand was weakPrice raised when demand was strong
How endogenous pricing biases the slope. The true demand curve (green) slopes down, but because prices were raised in high-demand weeks and cut in low-demand weeks, the observed points (blue) line up along a much flatter, even upward-sloping, line (magenta). Source: Vexpower, illustrative.

A price elasticity calculator to take away

The workbook does the same fit as the widget with live Excel formulas, so you can paste in a few years of weekly data and keep it as a reusable calculator: ln transforms on the Data sheet, SLOPE, INTERCEPT and STEYX on the Model sheet for the elasticity and its standard error, a t-based 95 percent interval, the optimal price at the central estimate and at each end of the interval, and a contribution curve chart. It controls for nothing, so treat it as a first look and a way to sanity-check a model’s price coefficient, not as a replacement for the model. If you want to see price handled inside a full model alongside media, the Vexpower marketing mix modeling course builds one step by step, and the incrementality testing guide covers how to design the experiment that settles what the regression can’t.

xlsx
Price elasticity calculator (Excel)Log-log elasticity with standard error and 95% CI, Lerner-rule optimal price across the interval, and a contribution curve. Room for 200 weeks, no macros.
Download

Downloads

xlsx
Price elasticity calculator (Excel)Paste price and quantity; live SLOPE/STEYX formulas give the log-log elasticity, 95% CI, optimal price and a contribution curve.
Download

Frequently asked questions

What is price elasticity of demand?

Price elasticity of demand is the percentage change in quantity demanded divided by the percentage change in price. An elasticity of -2 means a 1 percent price rise reduces quantity by about 2 percent. Demand is called elastic when the elasticity is below -1 and inelastic when it is between -1 and 0.

How do you calculate price elasticity from data?

Regress the natural log of quantity on the natural log of price, along with controls for seasonality, promotions, advertising and competitor prices. In this log-log model the coefficient on log price is the elasticity directly. With only two price points you can use the midpoint formula, but a regression over many periods gives an estimate with a confidence interval.

What is the profit-maximizing price given elasticity?

For a constant elasticity e below -1, the contribution-maximizing price is marginal cost multiplied by e divided by (1 + e). For example, with e = -2 the optimal price is twice marginal cost, and with e = -3 it is 1.5 times marginal cost. Equivalently, the margin (P - MC) / P should equal -1 / e, which is the Lerner rule.

What is a typical price elasticity?

It varies widely by category, brand and time horizon. Gerard Tellis's 1988 meta-analysis of 367 brand-level estimates found an average of about -1.76, but individual products range from close to zero to well below -3. Short-term promotional responses are usually larger in magnitude than responses to permanent price changes.

Why is my estimated price elasticity positive?

A positive slope almost always means price is endogenous: it was raised when demand was strong and cut when demand was weak, or promotions coincided with advertising and seasonal peaks. The regression then picks up the business's pricing behavior rather than customers' response. Controls, cost-based instruments or a price experiment are the usual fixes.

References

  1. Tellis (1988), The Price Elasticity of Selective Demand: A Meta-Analysis of Econometric Models of Sales, Journal of Marketing Research 25(4):331-341 367 price elasticities from about 220 brands or markets; mean price elasticity of -1.76.
  2. Lerner index (Wikipedia) Lerner rule: at the profit-maximizing price, (P - MC)/P = -1/e. Derived again on this page.
  3. Google Meridian documentation: control variables Price changes and promotions treated as non-media treatments with estimated causal effects, distinct from controls.
  4. Vexpower legacy course: What price maximizes profit?
Mike Taylor
Mike Taylor

I've built marketing mix models for Monzo Bank, Booking.com, Time Out, The AA and others, advised Google, Appsflyer and Recast on MMM, and teach marketing mix modeling on LinkedIn Learning. Before that I co-founded a 50-person growth marketing agency. I write the Vexpower MMM course.

Keep reading

Learn MMM by doing itThe Vexpower course walks through thirty lessons on one invented brand, with simulators, Python labs and a decision case you can defend.
See the course