Sign in

Blog · Finance metrics and formulas

Direct marketing ROI: match responses to contribution

Measure direct marketing ROI from matched response and purchase records. Calculate contribution after refunds and order costs, include the full campaign cost, and reconcile the result to finance exports.

The short answerDirect marketing ROI measures matched purchase contribution after campaign cost, divided by campaign cost. Match responses to purchases with documented identifiers and a fixed observation window, subtract refunds and variable order costs, and include the agreed campaign spending. Report this as attributed ROI unless a separate controlled comparison supports a claim about incremental purchases.

Direct marketing ROI compares the contribution from matched purchases with the cost of the campaign that generated the recorded responses. Match response logs to order and finance exports, subtract refunds and variable order costs, then deduct campaign spending. Label the result as attributed ROI unless a separate controlled comparison establishes incremental sales.

Fix the response and purchase rules first

A fictional US business supplies office products to company customers. It compares an email offer and a mailed offer sent during July 2026, recording qualifying responses through July 31 and purchases through September 30, 2026. Eligible purchases occur on or after the customer's qualifying response and through the purchase cutoff. Both campaigns receive the same observation window, and their customer audiences do not overlap in this example, so responder counts add across campaigns.

The response rule is a verified reply or offer-code redemption. The matching hierarchy uses a campaign-specific offer code first, then an existing response reference, then a reviewed customer identifier within the purchase window. A matching rule should be reproducible without guessing from customer names.

Keep one response row per customer and campaign for the unique-responder calculation. Preserve repeated interactions separately. Give each order one primary campaign assignment for this additive report, and keep ambiguous or unmatched orders outside the attributed result until reviewed.

For the general distinction between revenue return and profit return, see marketing ROI versus ROAS. Delivery and address controls for physical campaigns belong in direct-mail ROI.

Build the matched purchase file

Use these workbook tabs, filtered to the agreed windows before calculating:

Tab Grain Fields needed
Responses One unique customer-campaign response Response key, campaign, customer key, response date, matched purchase flag
Orders One distinct matched order Order key, primary campaign, gross billed amount, refunds, product cost, variable fulfillment cost
Costs One campaign Creative, distribution, list cost, allocated campaign labor

Finance should confirm that refunds and product cost belong to the matched orders. The IRS explanation of gross profit starts with net receipts after returns and allowances and subtracts cost of goods sold. The calculation here also subtracts the agreed variable fulfillment costs to reach contribution before campaign spending.

On Orders, put the listed fields in A through F. Contribution in G2 is:

=C2-D2-E2-F2

Keep shipping or handling cost in only one cost column. A product cost export that already includes fulfillment must be adjusted before the separate fulfillment subtraction. Leave general overhead outside this contribution definition and label the resulting scope clearly.

The response register and matched order export produce these campaign totals. Refunds are shown as positive deductions. Dollar amounts are whole USD.

Campaign Unique responders Purchasing responders Gross billed (USD) Refunds (USD) Product cost (USD) Variable fulfillment (USD) Contribution (USD)
Email offer 100 40 24,000 2,000 11,000 1,000 10,000
Mailed offer 80 30 21,000 1,000 10,000 1,000 9,000
Total 180 70 45,000 3,000 21,000 2,000 19,000

The email offer's contribution is $24,000 − $2,000 − $11,000 − $1,000 = $10,000. Total net revenue is $45,000 − $3,000 = $42,000, and total contribution is $42,000 − $21,000 − $2,000 = $19,000. A purchasing responder can place multiple orders; count that customer once in the responder columns while retaining every distinct order amount.

Include the campaign costs once

Campaign costs include the agreed expenses required to execute the offer, even when they were invoiced separately. Allocate shared creative or labor under a rule set before comparing returns. Keep the allocation visible so finance can reproduce it.

Campaign Creative (USD) Distribution (USD) List cost (USD) Campaign labor (USD) Total campaign cost (USD)
Email offer 1,200 300 500 2,000 4,000
Mailed offer 1,000 3,000 500 1,500 6,000
Total 2,200 3,300 1,000 3,500 10,000

In Costs, campaign is A and the cost components occupy B through E. Enter =SUM(B2:E2) in F2. The costs are illustrative allocations from this business's own cost schedule, not market prices.

If campaign labor also appears in a general acquisition cost review, explain the overlap rather than summing both measures. Customer acquisition cost has a different denominator and can include a broader selling cost scope.

Calculate and prove ROI

Attributed direct marketing ROI = (Matched contribution − Campaign cost) / Campaign cost

Build Summary columns A through E for campaign, matched contribution, campaign cost, contribution after campaign cost, and ROI. Enter these formulas in row 2:

=SUMIF(Orders!$B$2:$B$10000,A2,Orders!$G$2:$G$10000)
=SUMIF(Costs!$A$2:$A$10000,A2,Costs!$F$2:$F$10000)
=B2-C2
=IF(C2=0,"",D2/C2)

Extend ranges to cover the full files. For a report that also filters a business unit or period, Google Sheets SUMIFS supports multiple criteria. A zero campaign cost leaves ROI blank and requires review; it does not establish an unlimited return.

Campaign Matched contribution (USD) Campaign cost (USD) Contribution after campaign cost (USD) Attributed ROI
Email offer 10,000 4,000 6,000 150.0%
Mailed offer 9,000 6,000 3,000 50.0%
Total 19,000 10,000 9,000 90.0%

Total ROI is ($19,000 − $10,000) / $10,000 = 90.0%, rounded to one decimal place. The proof is that contribution after campaign cost plus campaign cost returns matched contribution: $9,000 + $10,000 = $19,000. Divide the summed amounts, rather than averaging the campaign ROI percentages.

Matched and unmatched orders must together reconcile to the scoped order extract. Matched net revenue, refunds, and costs must tie to their finance records, and the campaign cost schedule must tie to the spending ledger. Keep any difference visible before discussing budget changes; improving marketing ROI starts with a dependable baseline.

Where it goes wrong

  • Treating every response as a sale. Replies establish engagement; purchases require an order match.
  • Crediting the same order twice. Competing offer codes or customer matches need one documented assignment or an explicitly nonadditive report.
  • Ignoring later refunds. A campaign can look profitable before the return window has matured.
  • Leaving out execution costs. Creative, list, distribution, and agreed labor costs belong in the campaign cost schedule.
  • Calling matched purchases incremental. Existing demand may explain part of the result. A separate randomized holdout can test lift; NIST explains random assignment in controlled experimental design. It still requires an appropriate outcome definition and uncertainty assessment.

Measure your campaign cohorts in Covirage

Bring a sample of your own response log, matched order export, and campaign cost file to Covirage. Covirage maps the columns, and its tools compute and check the contribution comparisons; the external AI model explains the results with every figure traced to its rows. Create a free Covirage account, then set up your business and bring your files.

See revenue driver analysis for the supporting business context. Covirage is not affiliated with Google Sheets.

Questions people ask

What counts as a direct marketing response?

Use an observable action defined before launch, such as a redeemed offer code, recorded call, or identified reply. Keep the same definition across campaigns. A response is not automatically a purchase, and repeated actions by one person should not inflate unique responder counts.

Should direct marketing ROI use revenue or profit?

Use contribution after refunds, product costs, and the agreed variable order costs when evaluating the return available to cover campaign spending. Revenue alone ignores the cost of fulfilling purchases. Keep campaign cost separate so the same expense is not deducted twice.

How long should the purchase matching window be?

Choose a window that fits the buying cycle before evaluating results, then apply it consistently. Record both the response window and purchase cutoff. Compare campaigns at equal maturity and reopen the calculation for later refunds under a documented close policy.

Does an offer code prove a sale was incremental?

No. An offer code provides evidence of a connection to a campaign, but a buyer might have purchased anyway. Incremental return requires a suitable comparison, such as a randomized holdout, and an assessment of uncertainty rather than simply summing matched sales.