Blog · Finance metrics and formulas · Sales teams
Reconcile unique orders and channel costs before calculating omnichannel return. Use a worked spreadsheet example to allocate revenue and contribution without counting the same sale more than once.
Omnichannel ROI is contribution from unique campaign outcomes, less total campaign cost, divided by that cost. First reconcile the orders across channels; then apply one attribution rule to allocate their revenue and contribution. Adding each channel's reported sales can count the same order repeatedly and produce a return the company never earned.
Choose the scope before matching records: campaign cohort, markets, currency, order dates, return cutoff, and financial outcome. Do not mix bookings, invoiced sales, and collected cash in one revenue column. Document any store or customer identifier that helps match outcomes, without treating an uncertain identity match as confirmed.
Start with one row per order, or per order line when products have different costs. Retain shipment and refund detail separately and summarize it to the chosen grain. Multiple shipments are not automatically multiple purchases; separate orders from the same customer are not automatically duplicates.
Google Analytics' web-stream guidance describes using transaction IDs to suppress repeated purchase events. That illustrates the role of an order identifier; it does not replace reconciliation across your finance and channel exports. A repeated ID with conflicting amounts needs investigation rather than arbitrary removal.
Covirage is not affiliated with Google.
The marketing ROI versus ROAS guide owns the general return formula. The distinct job here is proving that the combined outcome and cost totals contain no repeated dollars.
An illustrative US business-supplies company reviews a completed August 2026 campaign cohort, with refunds through September 30, 2026. Its matched outcome register contains these four orders. Sales tax is excluded, and variable cost reflects the actual retained goods and fulfillment costs after applicable reversals.
Use an Orders worksheet with this header in row 1 and orders in rows 2 through 5:
| A: Order | B: Gross revenue (USD) | C: Refunds (USD) | D: Net revenue (USD) | E: Variable cost (USD) | F: Contribution (USD) |
|---|---|---|---|---|---|
| A | 10,000 | 1,000 | 9,000 | 5,400 | 3,600 |
| B | 8,000 | 0 | 8,000 | 4,800 | 3,200 |
| C | 12,000 | 0 | 12,000 | 7,200 | 4,800 |
| D | 5,000 | 0 | 5,000 | 3,000 | 2,000 |
| Total | 35,000 | 1,000 | 34,000 | 20,400 | 13,600 |
D2 = B2-C2
F2 = D2-E2
G2 = AND(A2<>"",COUNTIF($A$2:$A$5,A2)=1)
Copy down. Column G must be TRUE for every order. This checks uniqueness at the selected grain; it cannot identify different IDs that mistakenly represent the same purchase. Tie the $34,000 net revenue and $20,400 variable cost to the finance records before allocating either amount.
The gross profit margin guide explains the accounting margin boundary. Here contribution also includes the agreed variable selling and fulfillment costs, while campaign costs remain separate.
Suppose search claims orders A and B, social claims A and C, and email claims C and D. Full-credit claims would be $17,000 + $21,000 + $17,000 = $55,000, exceeding the unique net revenue by $21,000.
For this example, finance approves equal credit across the recorded channels on each order. This is an illustrative rule, not evidence that the channels caused equal effects. The marketing attribution guide covers alternative allocation rules.
Create a Claims worksheet with this header in row 1:
| A: Order | B: Channel | C: Weight | D: Allocated revenue (USD) | E: Allocated contribution (USD) |
|---|---|---|---|---|
| A | Search | 0.5 | 4,500 | 1,800 |
| A | Social | 0.5 | 4,500 | 1,800 |
| B | Search | 1.0 | 8,000 | 3,200 |
| C | Social | 0.5 | 6,000 | 2,400 |
| C | 0.5 | 6,000 | 2,400 | |
| D | 1.0 | 5,000 | 2,000 | |
| Total | 34,000 | 13,600 |
D2 = SUMIF(Orders!$A$2:$A$5,A2,Orders!$D$2:$D$5)*C2
E2 = SUMIF(Orders!$A$2:$A$5,A2,Orders!$F$2:$F$5)*C2
Copy through row 7. On Orders, add the following check in H2 and copy down:
=SUMIF(Claims!$A$2:$A$7,A2,Claims!$C$2:$C$7)-1
Every order must return zero, and every weight must be between zero and one. Confirm that each claim points to a valid order. Unattributed outcomes need an explicit unassigned allocation so their revenue remains in the reconciled total.
The following costs include media, creative, and allocated campaign labor once. Shared invoices are allocated across channels; they are not charged in full to each channel.
| Channel | Allocated revenue (USD) | Allocated contribution (USD) | Campaign cost (USD) | After campaign cost (USD) | ROI |
|---|---|---|---|---|---|
| Search | 12,500 | 5,000 | 3,500 | 1,500 | 42.9% |
| Social | 10,500 | 4,200 | 3,000 | 1,200 | 40.0% |
| 11,000 | 4,400 | 1,500 | 2,900 | 193.3% | |
| Total | 34,000 | 13,600 | 8,000 | 5,600 | 70.0% |
Attribution-based omnichannel ROI = (deduplicated contribution − total campaign cost) / total campaign cost
If this summary begins in A1, enter =C2-D2 in E2 and =IF(D2=0,NA(),E2/D2) in F2. Copy down through row 4. The total ROI is:
=IF(SUM(D2:D4)=0,NA(),SUM(E2:E4)/SUM(D2:D4))
The result is $5,600 / $8,000 = 70.0%. Percentages are rounded to one decimal place. Allocated revenue must total $34,000; allocated contribution must total $13,600; and $13,600 − $8,000 − $5,600 must equal zero.
Bring a sample of your own order, refund, channel-claim, and campaign-cost exports to Covirage with the allocation rule you want checked. Covirage maps the columns; its tools compute and check the figures, and the external AI model explains the result with every figure traced to its rows. Create a free Covirage account, then set up your business and bring your records.
See customer profitability for the contribution behind the reconciled sales total.
Different channels may each claim the same order under their own attribution windows and rules. Adding those claims repeats the revenue. Use a unique financial outcome register, then allocate each order across channels with weights that sum to one.
Yes, if both are in the defined campaign scope and can be reconciled under the same outcome basis. Preserve order identifiers, returns, sales dates, and fulfillment costs. Keep unmatched store sales visible rather than assigning them to digital channels without supporting evidence.
No. Deduplication establishes which records represent the same financial outcome. Attribution decides how to divide that outcome's credit among channels. You need a stable order total before applying weights, and the chosen weights must reconcile back to that total.
It describes the historical return under the selected allocation rule and cost boundary. It does not establish the incremental effect of extra spending. Budget changes also need evidence about marginal response, customer overlap, capacity, and the uncertainty of any causal estimate.