Sign in

Blog · How-to guides

Retail marketing ROI: returns, discounts and margin

Retail marketing ROI compares campaign contribution with marketing cost after discounts, returns and fulfillment. Work from store and online order exports, reconcile campaign credit, and calculate a return that reflects the margin actually retained.

The short answerRetail marketing ROI is campaign-linked contribution after marketing cost divided by marketing cost. Start with matched orders, subtract discounts and refunds, then deduct retained product cost and agreed variable fulfillment costs. Compare the remaining contribution with the full campaign budget. Reconcile store and online orders once, and label the result attributed unless a separate test establishes incremental sales.

Retail marketing ROI compares the contribution retained from campaign-linked orders with the cost of the campaign. Deduct discounts, refunds, product cost and agreed variable fulfillment costs before calculating the return. A store with more campaign sales can still produce a lower return when its promotion gives away more margin.

Start with the marketing ROI versus ROAS formulas for the general distinction. The retail job is to make the sales and cost inputs trustworthy across stores, online orders and later returns.

Set the campaign boundary before combining exports

Choose a campaign cohort and an observation cutoff. In this example, a fictional Ohio retailer reviews orders placed from July 1 through July 31, 2026, including refunds recorded against those orders through October 23, 2026. This is a cohort analysis rather than a July income statement: later refunds are connected to their original sales.

Use the same campaign identifier in the spend register and the order assignment file. Write down how a sale qualifies: a supplied promotion code, a recorded campaign interaction within the approved window, or an allocation already approved by the business. Preserve orders without a match as unmatched. A missing code is not permission to assign a sale to the largest campaign.

The export should contain order ID, original order date, store or channel, campaign credit, gross merchandise value, discounts, refunds and product cost. Add payment and fulfillment costs from the corresponding cost export. Keep taxes collected for government agencies outside the merchandise sales comparison.

Use one reporting location for each order. If a customer purchases online and picks up in Columbus, decide which location owns that order in this analysis. A separate operational pickup report can use another view, but adding the two views together would count the same receipt twice. The marketing attribution rules explain shared credit; this calculation starts after those rules have been selected.

Build the store comparison in a spreadsheet

The input table below represents deduplicated campaign orders aggregated by reporting location. Refunds are recorded after discounts, so they reverse the amount actually charged. Product cost is net of inventory value recovered from returned goods; fulfillment includes the agreed variable costs that remain after those returns. Marketing is allocated once from the campaign cost register.

Store or channel Gross sales (USD) Discounts (USD) Refunds (USD) Product cost (USD) Variable fulfillment (USD) Marketing cost (USD)
Columbus 60,000 6,000 9,000 27,000 3,000 9,000
Dayton 45,000 4,500 3,000 21,000 2,250 6,000
Online 55,000 5,500 11,000 22,000 2,750 10,000
Total 160,000 16,000 23,000 70,000 8,000 25,000

For the net sales boundary, the IRS discussion of sales returns and allowances explains that customer credits for returned merchandise and other sales allowances reduce gross sales. This example is a management comparison, so finance should also reconcile its sales definition with the company's reporting policy. Follow credit notes and returns when adjustments appear in a later reporting period.

Place the table headers in row 1 and the three location rows in rows 2 through 4. Columns A through G correspond to the input columns above. Add H for net sales, I for contribution before marketing, J for contribution after marketing and K for ROI:

H2 = B2-C2-D2
I2 = H2-E2-F2
J2 = I2-G2
K2 = IFERROR(J2/G2,"")

Fill down through row 4 and format K as a percentage. Microsoft documents IFERROR as returning the specified value when a formula produces an error. Here the blank prevents a zero spend denominator from becoming a displayed return; review missing and invalid inputs separately so blanks do not conceal data problems.

Store or channel Net sales (USD) Contribution before marketing (USD) After marketing (USD) Attributed ROI
Columbus 45,000 15,000 6,000 66.7%
Dayton 37,500 14,250 8,250 137.5%
Online 38,500 13,750 3,750 37.5%
Total 121,000 43,000 18,000 72.0%

Percentages are rounded to one decimal place; calculations use unrounded dollars. Dayton contributes more after marketing than Columbus despite having lower net sales. That is a reason to inspect promotion mix, costs and customer behavior before allocating the next budget, rather than automatically scaling the highest-sales location.

Prove the totals against the source files

The revenue bridge is $160,000 minus $16,000 minus $23,000, which equals $121,000. Deducting $70,000 of product cost and $8,000 of fulfillment leaves $43,000. Marketing of $25,000 leaves $18,000, and $18,000 divided by $25,000 gives 72.0%.

The total ROI cell is therefore:

=SUM(J2:J4)/SUM(G2:G4)

Do not average the location percentages. Tie each input total to its source report, including the refunds matched back to the cohort. Keep a reconciliation of all retailer orders split between campaign-assigned and unassigned orders so the campaign report does not quietly become the whole company's revenue.

For a larger prepared export, Microsoft's SUMIFS function adds amounts meeting multiple conditions. If a sheet named Orders has campaign in A, reporting store in B and net sales in C, sum an already reconciled campaign and store combination with:

=SUMIFS(Orders!C:C,Orders!A:A,$M$1,Orders!B:B,A2)

M1 holds the selected campaign. This formula groups supplied assignments; it does not resolve overlapping claims or create missing campaign identifiers. Covirage is not affiliated with Microsoft.

Test how later refunds change the answer

Suppose an additional $5,000 of refunds arrives for the same orders. The retailer recovers $2,000 of saleable inventory cost, while fulfillment and marketing costs remain unchanged. The updated bridge is:

Measure Original cutoff (USD) Later cutoff (USD)
Gross sales 160,000 160,000
Discounts 16,000 16,000
Refunds 23,000 28,000
Net sales 121,000 116,000
Product cost after recoveries 70,000 68,000
Variable fulfillment 8,000 8,000
Contribution before marketing 43,000 40,000
Marketing cost 25,000 25,000
Contribution after marketing 18,000 15,000

Updated ROI is $15,000 divided by $25,000, or 60.0%. Keep both cutoffs visible. Comparing a recently completed campaign with one whose returns have fully arrived rewards the less mature campaign for incomplete information. Use the next marketing ROI improvement review to investigate the underlying driver rather than changing the attribution rule to improve the percentage.

Where it goes wrong

  • Discounts appear twice. An export already containing net merchandise sales should not have promotion discounts subtracted again. Keep a documented gross-to-net bridge.
  • A refund reverses all product cost automatically. Damaged or nonreturnable goods may recover no inventory value. Use the actual recovery recorded by finance, and retain return handling costs.
  • Shared creative costs repeat across stores. Allocate the campaign total once and prove that store allocations sum to it. State the allocation basis alongside the result.
  • Overlapping channels claim one purchase. Resolve order-level duplicates before summarizing. A code redemption and a paid campaign interaction can describe the same transaction.
  • Attributed return becomes an expansion promise. These calculations describe assigned historical contribution. They do not establish how much additional demand the campaign caused or what the next budget increase will earn.

Check your retail campaign file in Covirage

Bring a sample of your own order, refund and campaign cost exports, with the credit rules and cost boundary stated. Covirage maps the columns, and its tools compute and check the contribution comparison; the external AI model explains the result with every figure traced to its rows. Create a free Covirage account and set up your business to bring your own file.

See customer profitability for the contribution behind campaign revenue.

Questions people ask

Should retail marketing ROI use sales or gross profit?

Use an agreed contribution measure that deducts the costs of earning the matched sales. Gross profit can be the starting point, but check whether payment fees, shipping and other variable fulfillment costs still need to be deducted before comparing the result with marketing spend.

How do returns affect a campaign measured last month?

Keep refunds linked to the original campaign orders and publish an updated cohort view through a stated cutoff. Reduce product cost only for the inventory value actually recovered. Separately reconcile those cohort adjustments with the dates on which the finance records recognized them.

Can online and store campaign revenue be added together?

Only after resolving duplicate orders and assigning one consistent credit rule. An online purchase collected in a store is still one sale. Keep the order identifier and chosen reporting store or channel, then show any shared campaign allocation separately from the sales record.

Does positive retail marketing ROI prove incremental profit?

A positive attributed return shows that assigned contribution covered the included marketing costs. Some customers may have purchased without the campaign. Incremental profit requires evidence about that alternative outcome, usually from an appropriately designed comparison, with costs and observation periods aligned.