
Reviews
Part of Ecommerce Advertising: Why Ad Sales Don't Match Orders
How to build ecommerce advertising benchmarks from your own data
Build ecommerce advertising benchmarks from your own data: ROAS and contribution formulas, a worked example, attribution rules and maturity windows.
What to take away
- Benchmark a defined campaign job, product group, and maturity window.
- Conversion and attribution are platform configurations, not financial truth.
- Use marginal contribution and customer health beside average return.
Ecommerce advertising benchmarks should help a team set, diagnose, or stop investment. Generic click-through, conversion, or return-on-ad-spend averages hide product margins, prices, brand demand, audience, placement, market, season, attribution, and return behavior.
Build a benchmark ladder
| Layer | Example | Required context |
|---|---|---|
| Delivery | Impressions and qualified reach | Platform and placement |
| Response | Clicks and product views | Counting definition |
| Commerce | Accepted paid orders | Deduplication and currency |
| Maturity | Cancellations and returns | Observation window |
| Value | Contribution after variable cost | Cost policy |
| Incrementality | Difference from valid comparison | Design and uncertainty |
Google Ads describes conversion tracking as linking ad interactions to actions the advertiser defines as valuable, like purchases or calls. The event must be configured and validated, and collection carries privacy and implementation considerations.
A counted conversion is not automatically a paid order, and Common ecommerce advertising questions often start with what a counted conversion proves about a paid order.
Freeze campaign, audience, product group, geography, currency, attribution settings, and event definitions for the comparison. Show impressions, clicks, spend, accepted orders, cancellations, returns, new customers, and contribution as counts as well as rates.
Calculate each layer from your own exports
Pull the ad side from the platform export (Google Ads, Meta Ads Manager or Microsoft Advertising) and the order side from your store's order export, not from the ad platform. Then compute the layers the same way every period:
- Platform ROAS= attributed conversion value / ad spend, as the platform reports it.
- Order ROAS= revenue of accepted paid orders matched to the campaign / ad spend.
- Return-adjusted ROAS= (matched order revenue - refunds on those orders after the maturity window) / ad spend.
- Contribution= matched order revenue - refunds - cost of goods - shipping, payment and other variable costs - ad spend.
Matching ad clicks to orders needs a shared key. Use UTM parameters on every paid link, and keep the Google click ID (gclid) and Meta click ID (fbclid) in the order record when the store captures them. Match on the order ID or customer ID, and drop duplicate rows before you count. Shopify, WooCommerce, BigCommerce and Amazon exports each name these fields differently, so map them once and keep the mapping. Tools such as Excel, Looker Studio or BigQuery can hold the joined table.
A hypothetical worked example shows why the layers differ. A campaign spends 1,000 in a month; the platform reports 4,000 in conversion value; the order export matches 3,200 of accepted paid orders; 400 is refunded inside the maturity window; goods, shipping and payment costs on the kept orders are 1,500. Platform ROAS is 4.0, order ROAS 3.2, return-adjusted ROAS 2.8, and contribution after ad spend is 300. The benchmark you record is the return-adjusted figure and the contribution, with the window and definitions beside them.
State how credit is assigned
Google Ads explains attribution models as rules for assigning conversion credit across ad interactions, and notes that the selected model affects reporting and bidding. Its default for many accounts is data-driven attribution, with a 30-day click window and a 1-day view window. Confirm those settings in your own account, because they can differ by conversion action.
Attribution is a product calculation rather than proof that the ad alone caused a purchase. Record the model and the click and view windows in force with every benchmark, because a change of model or window changes the number without any change in customer behavior.
Attribution Guardrails Checklist
- Keep brand and nonbrand demand distinct
- Separate new and existing customers
- Allow returns and chargebacks to mature
- Reconcile spend and orders with business systems
- Compare average and marginal performance
- Use experiments for causal evidence
A responsible target might be: acquire incremental first orders in a verified product group within a return-adjusted contribution range while holding complaints and delivery failures stable. It is more defensible than a universal ROAS target. A defensible target still needs the team's own repeat purchase rate for that product group to judge whether first orders turn into lasting customers.
Set the maturity window from your own return data. For example, count refunds at 30, 60 and 90 days after purchase, then use the shortest window that captures most of the returns in your category. Record the window with each benchmark.
When volume is low, use longer windows and raw counts. Do not combine unrelated products, markets, or campaign jobs to smooth a graph. Record that evidence is insufficient when the data cannot support action.
Make the comparison reproducible
Keep benchmark reporting separate from controlled tests. A benchmark describes what happened in your data. A controlled test, such as a geo holdout, estimates what the spend caused, and it needs its own design and uncertainty.
Before comparing results, state the benchmark population, period, inclusion rules, calculation and currency. State the maturity window and the uncertainty, and keep market context separate from your internal target. Recalculate any figure from the cited source or your governed dataset, and record any mismatch.
Privacy rules shape the order data you can join. Under the CCPA as amended by the CPRA, and under the GDPR for EU shoppers, match records only for purposes the customer was told about. Google Consent Mode changes what conversion data the tags can send when a visitor declines cookies, so record the consent setting with each benchmark.
A benchmark becomes useful only after the local team explains why the comparison group and method fit the decision, and a ecommerce advertising checklist keeps population, period, and calculation rules visible so teams can audit each benchmark.
For ecommerce advertising benchmarks, keep the evidence record beside the decision. That lets a reviewer reproduce the reasoning without relying on memory. Set the next review date and name the change that would trigger an earlier check.
Record rejected options as well as the chosen path, because the original constraint may later change. Use the same definitions in the interface, export, meeting note, and correction log. Close unused reports and permissions after the decision cycle ends.
Common questions
What is a good advertising ROAS?
There is no universal value. Margin, returns, customer mix, attribution, incrementality, cash flow, and strategic purpose matter.
Should platform conversions match orders?
Not necessarily, but material differences should be explained through event, identity, attribution, currency, and timing rules.
When should benchmarks reset?
Reset after material changes to product, price, market, tracking, attribution, audience, campaign type, or return behavior.







