Strategi

Sale Campaign Review in GA4: 6 Numbers to Check Before 11.11

The first slide of almost every 10.10 recap carries one number: revenue on the day against a normal day, with a big green arrow. It is correct, and close to useless for deciding what to change for 11.11.

From 23 October there are 19 days until 11.11, and the expensive decisions (channel allocation, discount depth, checkout fixes, retargeting budget) need locking this week. This is the sale campaign review we run in GA4 for clients after every double-date sale: six numbers, each with its report path, our thresholds and the decision it forces, plus a one-page report template.

One assumption: your property already sends the standard e-commerce events (view_item, add_to_cart, begin_checkout, purchase with value) and your links carry UTMs. If not, fix it first with our GA4, UTM and attribution guide.


Quick Summary

  • Number one is always tracking coverage: GA4 revenue divided by order-system revenue. Below 80%, make no budget calls from GA4 until you have found the cause.
  • Channel ROAS only means something next to break-even ROAS: 1 divided by contribution margin before ads.
  • A falling begin_checkout to purchase ratio almost always traces back to checkout itself (shipping, vouchers, VA expiry). Fix it before adding spend.
  • The size of your cart abandoner audience caps your retargeting budget.
  • Net incremental revenue, after the wait effect and post-sale dip, is usually far below headline revenue, and it is the number for the board deck.

Three Settings to Check Before a Sale Campaign Review in GA4

Date windows. You need four date ranges. In this article’s example: the campaign, 8–12 October (5 days, starting Thursday); a baseline, 17–21 September (same weekday start, no major promo); a before window, 1–7 October; and an after window, 13–19 October. “Last month’s average” blends weekdays, weekends and payday.

Data retention. Admin > Data collection and modification > Data retention. The default for Explore data is 2 months.1 Standard reports are unaffected, but your 10.10 explorations will be gone by December. Switch to 14 months today; 10.10 is still inside the window, so it will be kept.

Data thresholds. If tables look patchy (an orange triangle in the report corner), check Include Google signals in reporting identity under Admin > Data collection and modification > Data collection.2 The setting is property-wide and affects all users’ reports, so change it with the property owner’s sign-off. A more reversible option: switch Reporting identity to Device-based under Admin > Data display > Reporting identity while you build this report.


Number 1: Tracking Coverage

Report path: Reports > Monetization > Overview (Purchase revenue), then Reports > Acquisition > Traffic acquisition with Session primary channel group (Default channel group) as the primary dimension and Purchase revenue as the metric (add it via Customize report if needed). Avoid Total revenue, which also counts ad and subscription revenue.

Calculate two things:

Tracking coverage = GA4 revenue / Order-system revenue (Shopify, WooCommerce, your database)
Unassigned share  = "Unassigned" channel revenue / GA4 revenue

Good: coverage at 90% or above and stable against baseline, Unassigned under 5%. Amber: coverage 80–90%. Use the other numbers, but log the gap in the report. Bad: coverage below 80%, or dropping sharply during the campaign, or Unassigned above 10%.

These thresholds are our internal rules, not a Google standard. Some gap is unavoidable (ad blockers, declined cookies, bank-app payments). The dangerous gap is one that widens during the campaign: usually an untagged promo page or a changed payment redirect. Order-system revenue means paid orders only, excluding cancellations and expired VAs. Then check when purchase fires: on order creation (the thank-you page, once the VA number is issued) or on confirmed payment (server-side or Measurement Protocol). If it fires on order creation, unpaid VAs count as purchases, coverage can top 100%, and VA problems vanish from Number 3.

Unassigned means a session’s source and medium matched none of GA4’s default channel group rules,3 usually because of homemade UTM values such as utm_medium=wa-blast or utm_medium=kol. Untagged links do not end up here. A link opened from the WhatsApp app usually arrives with no referrer and is counted as Direct, and an untagged Instagram bio link is counted as Organic Social because it comes through l.instagram.com. If Direct or Organic Social swells during the campaign, check for untagged links there too.

Decision for 11.11: below 80% coverage, treat every other number as directional and find the leak first. If Unassigned is high, lock a list of allowed utm_medium values for the team and every KOL, and audit each 11.11 link before launch.

Governance note: never “close” the gap by tracking visitors who declined consent. Indonesia’s Personal Data Protection Law (UU No. 27 of 2022) lists explicit consent among the lawful bases for processing (Article 20(2)), and it is the safest basis for non-essential analytics tracking. Tracking people who declined exposes you to administrative sanctions, including fines of up to 2% of annual revenue (Article 57).4 For forms and checkout, see our PDP Law consent guide.


Number 2: ROAS per Channel Against Break-Even ROAS

Report path: Reports > Acquisition > Traffic acquisition (Purchase revenue by channel), joined with spend per platform. For purchase-path context: Advertising > Attribution > Attribution paths (formerly Conversion paths). GA4 now offers data-driven attribution plus two last-click variants (paid and organic last click, and Google paid channels last click).5

Google Ads sends cost automatically; Meta and TikTok cost can come in through the Campaign Data Import connectors (Admin > Data import).6 Otherwise, and for KOL fees, pull spend from each platform:

Channel ROAS    = GA4 channel revenue / Channel spend
Break-even ROAS = 1 / Contribution margin before ads (% of promo price)

Contribution margin before ads is promo price minus COGS, platform fees and fulfillment (full method in our flash sale discount break-even formula).

Good: ROAS clearly above break-even, or below it while Attribution paths shows the channel as a regular early touchpoint. Bad: ROAS below break-even and rarely early in paths.

Meta will look better in Ads Manager than in GA4: it credits sales within 7 days of a click and 1 day of a view by default,7 while Traffic acquisition credits the session that produced the purchase. Rank channels from one source consistently and use the other as a check.

Decision for 11.11: channels above break-even scale in steps. Below break-even with a clear early-path role: keep, but capped. Below break-even with no early role: cut. Split Google brand from non-brand first, since brand search often just harvests demand other channels created.


Number 3: Checkout to Purchase Ratio

Report path: Explore > Funnel exploration, with steps view_item > add_to_cart > begin_checkout > purchase, run for the campaign window and the baseline.

Focus on one ratio:

Checkout ratio = Users who purchased / Users who began checkout

Good: at or slightly below baseline (campaign traffic is colder). Bad: a drop of more than 5 percentage points against baseline. VA expiry only shows up here if purchase fires when payment is confirmed (see Number 1).

A drop here is almost never an ad problem. What stops these buyers is usually shipping cost revealed late, a failing voucher, a VA that expires too fast, or a payment page slowing under load.

Decision for 11.11: if this ratio fell, the checkout fix gets funded before any extra ad spend, because every point recovered is extra sales from traffic you have already paid for.


Number 4: Cart Abandoner Audience Size

Report path: Explore > Free form, set the date range to the 14 days ending on the last campaign day (29 Sep–12 Oct in the example), as a proxy for the pool you will have going into 11.11, and create a user segment: include add_to_cart, then add an exclude group for purchase. For Google Ads, build the audience under Admin > Data display > Audiences with a 14-day membership duration.

Retargeting budget capacity ≈ Reachable people × Max frequency × (CPM / 1,000)

Good: the audience absorbs the planned budget without breaching your frequency cap. Bad: the planned budget is far above capacity: frequency spikes, CPM climbs, and the same person sees the same ad a dozen times.

What Meta can actually reach is the Pixel-based Custom Audience in Ads Manager, usually smaller than the GA4 segment. Meta shows only an estimated range, and very small audiences show no exact figure. Check both.

Decision for 11.11: set the retargeting ceiling from this capacity and send the rest to prospecting that refills the pool. Audience structure and budget split are in our Meta Ads cart abandoner retargeting playbook.


Number 5: Share of Revenue From Existing Customers

Report path: export paid orders from your order system or CRM and match each buyer’s email or phone number against orders placed before the campaign. Run it for the campaign window and the baseline. If GA4 is all you have, use Explore > Free form with a user segment of people who triggered purchase before the campaign start date, or compare Total purchasers with First time purchasers. Both are still counted per device and cookie, so treat them as estimates.

Existing-customer share = Revenue from buyers with a prior order / Total revenue

Good: close to baseline, or lower because new buyers grew. Bad: existing-customer share jumps well above baseline.

Do not use the New / returning dimension for this. “Returning” in GA4 means a user or device that has had a previous session, not someone who has bought before. A teaser that works brings plenty of shoppers in during the days before the sale, so the returning share can rise with no cannibalization at all.

A spike in existing-customer share means much of your discount went to people who would probably have paid full price. That is cannibalization, and its cost is the full discount handed to them.

Decision for 11.11: if cannibalization was high, keep the deep discount on acquisition paths only (prospecting ads, a new-visitor landing page). Existing customers get early access, bundles or a gift with purchase via WhatsApp or email, which lifts order value without cutting the public price.


Number 6: Net Incremental Revenue

Report path: Reports > Monetization > Overview with date comparison, or Explore > Free form with Date as rows and Purchase revenue as the value, for 1–19 October and the baseline.

Window uplift     = Campaign revenue − (Baseline daily revenue × Campaign days)
Wait effect       = (Baseline daily − Daily in the 7 days before) × 7
Post-sale dip     = (Baseline daily − Daily in the 7 days after) × 7
Net incremental   = Window uplift − Wait effect − Post-sale dip

Keep every input on the same basis (GA4). The 1–7 October window falls right after payday, which can hide the wait effect. If the wait effect or post-sale dip comes out negative (daily revenue above baseline), set that component to zero. A negative net incremental figure is reported as is.

Good: positive once converted to contribution profit, with the dip recovering within a week. Bad: net incremental near zero, or revenue still below baseline two weeks after the campaign.

Decision for 11.11: this sets an honest target and the teaser length. A large wait effect means customers have learned to wait for double dates, so shorten the announcement period and hold back the discount depth.


Worked Example: A Premium Leather Shoe Brand in Bandung

An illustration built from patterns we see often, not one client’s data: a local leather shoe brand with its own online store, average full price Rp 890,000, 10.10 discounts up to 25%.

Number 1. Order-system revenue for 8–12 October: Rp 486 million. GA4 revenue: Rp 402 million. Coverage 82.7%, in the amber zone. Unassigned Rp 31 million (7.7%). Cause, found in an hour: the WhatsApp broadcast link used utm_medium=wa-blast and six KOL links used utm_medium=kol, two values no GA4 channel rule recognizes.

Number 2. Contribution margin before ads at promo price: 48%. Break-even ROAS = 1 / 0.48 = 2.08x.

ChannelSpendGA4 revenueGA4 ROASStatus
Paid Social (Meta)Rp 64MRp 104M1.63xBelow break-even
Paid Search (Google Ads)Rp 29MRp 97M3.34xSafe
Organic Searchn/aRp 71Mn/an/a
Directn/aRp 58Mn/an/a
Emailn/aRp 41Mn/an/a
Unassignedn/aRp 31Mn/aFix UTMs

Ads Manager claimed Rp 188 million for Meta (2.94x). In Attribution paths, Paid Social often appeared as an early touchpoint before Paid Search. Of the Rp 97 million from Google Ads, Rp 71 million came from brand keywords. The call: Meta comes down only slightly, to Rp 60 million for 11.11 with fresh creative, because its early-path role is real. Non-brand search only scales in ad groups running above 2.08x.

Number 3. 1,890 users began checkout, 620 purchased. Checkout ratio 32.8% against a 46% baseline. The trace found virtual accounts expiring after 1 hour and shipping cost appearing only at the payment step. This store fires purchase server-side on confirmed payment, so VA expiry does show up here. If the ratio recovers to 46% on the same traffic:

1,890 × 46% = 869 purchases, or 249 more
249 × Rp 648,000 (GA4 average order value) = Rp 161 million

Number 4. 14-day cart abandoner segment: 3,590 users. The matching Pixel Custom Audience in Meta: roughly 2,300 people (Meta’s estimate). With a frequency cap of 8 over 10 days and a Rp 45,000 CPM:

2,300 × 8 × (45,000 / 1,000) = Rp 828,000

The team had planned Rp 15 million for cart retargeting against a pool that could absorb under Rp 1 million. The rest moved to 30-day visitor retargeting and prospecting.

Number 5. Matched against the order database by phone number and email, existing customers made up 49% of campaign revenue, against 27% at baseline. GA4’s returning share rose further (57% from 34%), but part of that came from 7-day teaser visitors coming back on the day, so the backend figure is the one used. For 11.11, the 25% discount runs only on the acquisition landing page. Customers in the database get early access on 10 November and a free leather care kit worth Rp 85,000.

Number 6. Baseline daily GA4 revenue Rp 38 million. GA4 daily average for 1–7 October: Rp 32 million; 13–19 October: Rp 29 million.

Window uplift     = 402 − (38 × 5) = Rp 212 million
Wait effect       = (38 − 32) × 7  = Rp 42 million
Post-sale dip     = (38 − 29) × 7  = Rp 63 million
Net incremental   = 212 − 42 − 63  = Rp 107 million

Decision: the 11.11 teaser shrinks from 7 days to 3, and the headline discount drops to 20% everywhere except the acquisition page.

The recap slide said “Rp 486 million in 5 days”. The meeting number is Rp 107 million incremental, about Rp 129 million corrected for 82.7% coverage: almost four times smaller, before COGS, platform fees and ad spend.

Incremental contribution ≈ 129 × 48% = Rp 62 million. Baseline ad spend runs Rp 6 million a day, so incremental spend = 93 − (6 × 5) = Rp 63 million. The result is roughly −Rp 1 million before KOL fees, and even that is optimistic: the Rp 190 million of baseline revenue inside the window (about Rp 230 million on an order-system basis) was also sold at a discount. At an assumed 20% average effective discount, the margin handed to buyers who would have bought anyway is roughly Rp 57 million (230 / 0.8 − 230), putting the rough loss near Rp 58 million.

So the 11.11 lever is checkout, not Meta: recovering the ratio to 46% is worth about Rp 77 million of contribution (Rp 161 million × 48%) on the same traffic, and the Number 5 change stops the discount leaking to existing customers.


One-Page Post-Campaign Report Template

Copy it into Notion (the table converts automatically) or paste into Google Sheets for the table section. If it spills past one page, something in it is not driving a decision; move it to an appendix.

POST-CAMPAIGN REPORT: [Campaign name]
Prepared: [name], [date]          Approved: [name], [date]

WINDOWS
Campaign : [date]–[date] ([n] days)
Baseline : [date]–[date] (same weekdays, no promo)
Before   : [date]–[date]        After: [date]–[date]

SUMMARY (fill in last)
Order-system revenue   : Rp ...
Net incremental        : Rp ... (coverage-corrected: Rp ...)
Total ad spend         : Rp ...
Campaign contribution profit (est.): Rp ...
Key decision for next campaign: ...

| #  | Number                         | Campaign | Baseline | Status (Green/Amber/Red) | Decision          | Owner | Due |
|----|--------------------------------|----------|----------|--------------------------|-------------------|-------|-----|
| 1  | Tracking coverage / Unassigned |          |          |                          |                   |       |     |
| 2a | ROAS Meta vs BE (...x)         |          |          |                          |                   |       |     |
| 2b | ROAS Google non-brand vs BE    |          |          |                          |                   |       |     |
| 2c | ROAS [other channel] vs BE     |          |          |                          |                   |       |     |
| 3  | Checkout to purchase ratio     |          |          |                          |                   |       |     |
| 4  | Cart audience / capacity       |          |          |                          |                   |       |     |
| 5  | Existing-customer revenue share|          |          |                          |                   |       |     |
| 6  | Net incremental revenue        |          |          |                          |                   |       |     |

RISKS AND DATA NOTES
- GA4 vs order-system gap: ...% (known causes: ...)
- Channels with no cost data in GA4: ...
- GA4 setting changes during the period: ...

Our rules: the Decision column holds a verb and a number (“cut Meta to Rp 60 million”, “move Rp 14 million to prospecting”), never “optimize”. Every red row gets an owner and a due date at least 7 days before the next campaign goes live. If the data does not exist, write “no data” and why.

For 11.11, the realistic deadline is 4 November; after that, major campaign changes risk restarting the learning phase (see our 40-day 11.11 sale prep checklist). Agree on CAC, ROAS and contribution margin definitions first, using our CAC, LTV and ROAS metrics guide.


How Eranya Digital Helps

These six numbers are only as good as the events, UTMs and checkout underneath. That is the work we do for clients, through to a Looker Studio dashboard that shows all six after every campaign.

To pressure-test your 10.10 report against this framework before the 11.11 budget locks, book a strategy session with our team.


References


<script type="application/ld+json">
[
  {
    "@context": "https://schema.org",
    "@type": "Article",
    "headline": "Sale Campaign Review in GA4: 6 Numbers to Check Before 11.11",
    "description": "Sale campaign review in GA4 after 10.10: six numbers, report paths, good/bad thresholds, the 11.11 decision each drives, and a one-page report template.",
    "image": "https://eranya.digital/images/blog/sinyal-perilaku-pengguna.webp",
    "author": {"@type": "Organization", "name": "Eranya Digital", "url": "https://eranya.digital"},
    "publisher": {"@type": "Organization", "name": "PT Eranya Digital Nusantara", "logo": {"@type": "ImageObject", "url": "https://eranya.digital/images/logo.png"}},
    "datePublished": "2026-10-23",
    "dateModified": "2026-10-23",
    "mainEntityOfPage": {"@type": "WebPage", "@id": "https://eranya.digital/blog/sale-campaign-review-ga4/"},
    "inLanguage": "en-US",
    "keywords": ["sale campaign review GA4", "post-campaign analysis GA4", "post-campaign report template", "break-even ROAS", "GA4 funnel exploration", "incremental revenue calculation"],
    "articleSection": "Strategi"
  },
  {
    "@context": "https://schema.org",
    "@type": "FAQPage",
    "mainEntity": [
      {"@type": "Question", "name": "Which GA4 metrics matter most in a sale campaign review?", "acceptedAnswer": {"@type": "Answer", "text": "Start with tracking coverage (GA4 revenue divided by revenue in your order system), because nothing else can be trusted if coverage is low. Then: revenue and ROAS per channel against your break-even ROAS, the begin_checkout to purchase ratio, the size of your cart abandoner audience, the share of revenue from existing customers, and net incremental revenue after subtracting the pre-sale wait effect and the post-sale dip. Each one answers a single budget or operational decision for the next campaign."}},
      {"@type": "Question", "name": "Why doesn't GA4 revenue match Shopify or Meta Ads Manager?", "acceptedAnswer": {"@type": "Answer", "text": "Because they measure different things. Your order system records every paid order. GA4 only records transactions whose purchase event actually fired, so visitors with ad blockers, visitors who declined cookies, or buyers who finished payment inside a banking app may never be counted. Meta Ads Manager uses its own attribution window (7-day click and 1-day view by default), so one sale can be claimed by Meta and credited to a different channel in GA4. A gap is normal. What matters is that the gap is stable and you know its size."}},
      {"@type": "Question", "name": "How do you calculate break-even ROAS for a discount campaign?", "acceptedAnswer": {"@type": "Answer", "text": "Break-even ROAS = 1 divided by your contribution margin before ad spend, expressed as a percentage of the discounted selling price. If after COGS, platform fees and fulfillment you keep 48% of the promo price, your break-even ROAS is 1 / 0.48 = 2.08x. A channel below that number loses contribution on every sale credited to it, unless you can show it starts purchase paths that another channel closes."}},
      {"@type": "Question", "name": "What comparison period should I use for a post-campaign review?", "acceptedAnswer": {"@type": "Answer", "text": "Use the same number of days as the campaign window, starting on the same weekday, from a normal period with no major promotion. For a 5-day campaign starting on a Thursday, compare it with 5 days starting on a Thursday a few weeks earlier. Add the 7 days before and the 7 days after the campaign as separate windows, because that is where the wait-for-the-sale effect and the post-sale dip show up."}}
    ]
  }
]
</script>

Footnotes

  1. Google Analytics Help. [GA4] Data retention. support.google.com/analytics/answer/7667196 The 2-month and 14-month retention settings and their effect on Explore. ↩

  2. Google Analytics Help. [GA4] Data thresholds. support.google.com/analytics/answer/9383630 When GA4 applies thresholds to reports and explorations, and how Google signals relates to them. ↩

  3. Google Analytics Help. [GA4] Default channel group. support.google.com/analytics/answer/9756891 GA4’s rules for grouping sessions into channels, including the conditions that put a session in Unassigned. ↩

  4. Republic of Indonesia. Law Number 27 of 2022 on Personal Data Protection (UU PDP). peraturan.bpk.go.id/Details/229798/uu-no-27-tahun-2022 Lawful bases for processing (Article 20) and administrative sanctions (Article 57). ↩

  5. Google Analytics Help. [GA4] Get started with attribution. support.google.com/analytics/answer/10596866 The attribution models available in GA4 and the Attribution paths (formerly Conversion paths) report. ↩

  6. Google Analytics Help. Import campaign data. support.google.com/analytics/answer/10071305 Campaign Data Import for cost, clicks and impressions, including the Meta and TikTok connectors. ↩

  7. Meta Business Help Center. About attribution models and attribution settings. facebook.com/business/help/460276478298895 How click and view attribution windows work in Meta Ads Manager. ↩

Sale Campaign Review in GA4: Common Questions

Which GA4 metrics matter most in a sale campaign review?

Start with tracking coverage (GA4 revenue divided by revenue in your order system), because nothing else can be trusted if coverage is low. Then: revenue and ROAS per channel against your break-even ROAS, the begin_checkout to purchase ratio, the size of your cart abandoner audience, the share of revenue from existing customers, and net incremental revenue after subtracting the pre-sale wait effect and the post-sale dip. Each one answers a single budget or operational decision for the next campaign.

Why doesn't GA4 revenue match Shopify or Meta Ads Manager?

Because they measure different things. Your order system records every paid order. GA4 only records transactions whose purchase event actually fired, so visitors with ad blockers, visitors who declined cookies, or buyers who finished payment inside a banking app may never be counted. Meta Ads Manager uses its own attribution window (7-day click and 1-day view by default), so one sale can be claimed by Meta and credited to a different channel in GA4. A gap is normal. What matters is that the gap is stable and you know its size.

How do you calculate break-even ROAS for a discount campaign?

Break-even ROAS = 1 divided by your contribution margin before ad spend, expressed as a percentage of the discounted selling price. If after COGS, platform fees and fulfillment you keep 48% of the promo price, your break-even ROAS is 1 / 0.48 = 2.08x. A channel below that number loses contribution on every sale credited to it, unless you can show it starts purchase paths that another channel closes.

What comparison period should I use for a post-campaign review?

Use the same number of days as the campaign window, starting on the same weekday, from a normal period with no major promotion. For a 5-day campaign starting on a Thursday, compare it with 5 days starting on a Thursday a few weeks earlier. Add the 7 days before and the 7 days after the campaign as separate windows, because that is where the wait-for-the-sale effect and the post-sale dip show up.