8 parts · 6 checkpoints · Take away: 2 records · 1 note
Show all 8 parts
- 01Lesson 5 · Ads reporting contract
- 02Lock the sample before reconciling
- 03Order-level reconciliation notebook, has a checkpoint, has a work product
- 04Ads report reconciliation
- 05Field-level reconciliation notes
- 06Click ID break checks
- 07Naming and click ID checks
- 08Tool handoff, has a checkpoint, has a work product
Continues from: Shopify Consent Mode v2: Validate GA4 and Google Ads Signals
Carry the consent boundary into reporting
The previous lesson did not leave a simple “Consent Mode installed” note. It recorded four consent signals, the default/update order, accept/reject/withdraw scenarios, and a seven-day visibility read. That evidence explains which GA4 and Ads signals are limited by consent. It does not explain every reporting gap or prove that ads caused orders or profit.
Divide the team's work into four evidence layers: Google Ads supplies delivery and bidding signals, GA4 describes sessions and events on site, Shopify records orders and refunds, and finance checks variable costs and contribution profit. Define the fields each layer hands off, then compare the same dates, time zone, campaign, and order scope.
This reconciliation review routes the gap to account linking, events, consent, click IDs, orders, or profit. A gap is not causal evidence. While synchronization, refund, or consent windows remain open, do not scale, pause spend, or force two dashboards into one number.
Lesson 5 · Ads reporting contract
Do not force the numbers to match. Build an ads signal transfer board first.
After GA4 and Google Ads are linked, the real question is not which dashboard is true. The team must know which number guides bidding, which number diagnoses site quality, and which number must be checked against Shopify and finance.
- 4: system roles
- 4: conversion-setup topics, including an enhancement rather than four independent purchase sources
- 5: launch proofs
Lesson output: ads signal transfer board
- Google Ads: Spend, clicks, impressions, search terms, bidding, campaign structure, and platform-attributed conversions.
- GA4: On-site behavior quality, landing-page fit, event chain, cross-channel comparison, audiences, and path reading.
- Shopify: Real orders, refunds, customers, products, net sales, and fulfillment state.
- Finance sheet: Ad cost, payment fees, shipping cost, refunds, margin, and cash outcome.
Define the terms used in this review
A “conversion action” is a reporting object configured in Google Ads. It may use an Ads tag, an imported GA4 key event, or an offline import. Enhanced conversions supplements matching for an existing web or offline action; it is not another independent purchase source. Marking an event as a GA4 key event does not automatically make it an Ads conversion action; the team still needs to check its source, counting, value, and goal settings.
Terms to know before reconciling
- Google Ads conversion action
A reporting object Google Ads uses to count a business action. Check its source and counting method before deciding whether it is part of a bidding goal. Example: A purchase action may come from a GA4 import or an Ads tag. If both sources are primary, check for duplicate bidding signals.
- Primary / secondary conversion
A primary action usually appears in the Conversions column and informs bidding when the campaign uses a standard goal. A secondary action is normally for observation in All conversions, but it can affect bidding when included in a custom goal. Check both the action and the campaign goal. See Google Ads guidance on primary and secondary actions.
- Conversion window
The time after a click or other interaction during which an action can qualify for a conversion action. It changes reporting eligibility; it does not change whether a Shopify order exists.
- Click ID
GCLID, GBRAID, or WBRAID identifies an ad click in the measurement path. It can help match a click to a later imported result. A missing ID calls for a redirect and matching check; by itself, it does not prove that an ad did or did not cause an order.
- Contribution-profit line
In this lesson, it marks orders that clear the classroom threshold after the agreed variable order costs and ad spend. It is a sample rule, not a long-run margin or a complete accounting conclusion.
Google says whether a primary action is used for bidding also depends on whether a campaign uses a standard goal or a custom goal; a secondary action can be included in a custom goal. Its missing-Ads-data guidance says data can take up to 48 hours to appear after linking and lists the link, auto-tagging, and GCLID lost in redirects among the checks. These pages explain platform behavior; they do not reveal a specific account's settings.
Lock the sample before reconciling
Four numbers come from four definitions; write the denominators before judging ads
Lock the sample to 2026-07-07 through 2026-07-13, complete calendar days in the GA4 property time zone America/New_York, and the fixed campaign list US_Search_Tumbler_Summer plus US_Shopping_Tumbler_Summer, representing the Search and Shopping campaigns in this example. The product remains TMB-20-OZ; the trace order is Shopify #1008 / TMB-1048 / $48 USD. Without those fields, every discussion of missing orders mixes windows, markets, or campaigns.
The 52 in Google Ads is a platform conversion-action count shaped by source, counting method, and attribution window. The 39 in GA4 is a purchase-event count shaped by event quality, consent, and observable identity. The 44 in Shopify is net-order truth in this snapshot. The 16 in finance is the subset of those 44 orders above the contribution-profit line. These are not the same object and do not share a natural denominator.
Calculate gaps only to size the investigation. Ads exceeds GA4 by 13, so GA4 is 25% below the Ads count when 52 is the reference. Shopify exceeds GA4 by 5, so GA4 is about 11.4% below Shopify when 44 is the reference. Ads exceeds Shopify by 8, about 18.2% of Shopify net orders. These ratios size the difference; they do not crown a more accurate platform or prove that eight extra Ads conversions are eight incremental orders.
Read each gap with its denominator
The percentage changes when the reference count changes. Keep the raw difference beside the ratio so a reader can see what the calculation answers.
The same gaps use different denominators
Ads 52 vs GA4 39
- Gap
- Difference: 13 conversions.
- Calculation
- 13 ÷ 52 = 25% below Ads.
- What it says
- The GA4 count is 25% below the Ads reference count in this fixed sample. This does not mean the missing 13 are caused by consent or by a broken GA4 event.
Shopify 44 vs GA4 39
- Gap
- Difference: 5 purchases.
- Calculation
- 5 ÷ 44 ≈ 11.4% below Shopify.
- What it says
- The GA4 purchase count is about 11.4% below the Shopify net-order reference. Check order status, event scope, and report timing before naming a cause.
Ads 52 vs Shopify 44
- Gap
- Difference: 8 conversions / net orders.
- Calculation
- 8 ÷ 44 ≈ 18.2% above Shopify.
- What it says
- Ads is about 18.2% above the Shopify count in this comparison. It is not an incrementality estimate or a count of eight extra customers.
Keep the base in the sentence. “GA4 is 25% below Ads” and “Ads is about 33.3% above GA4” describe the same raw gap with different denominators. These ratios size the review; they do not prove which system caused the difference.
If the next question is “How many orders would disappear without this ad spend?”, open a separate incrementality question in the transfer board; do not treat the Ads-versus-GA4 gap as the answer. Record the comparison group, observation window, outcome, and acceptable decision error first. Diemert et al.’s CRITEO-UPLIFTv2 paper describes pooled randomized advertising incrementality tests. The tests had different treatment ratios, which made test identity a hidden confounder when tests were combined; v2 subsampled each test to a common global treatment ratio. That is a dataset-design lesson about pooled experiment comparability, not evidence of this store’s incremental orders, ad effect, or feature relationships.
16 divided by 44 is 36.4%, but that is not yet a scale decision
Finance shows that only 16 of 44 net orders cross the contribution-profit line, a sample pass rate of about 36.4%, leaving 28 below the line. Keep the intermediate reasoning: 44 minus 16 equals 28, and 16 divided by 44 is about 36.4%. Ads ROAS or GA4 revenue alone hides how refunds, discounts, shipping, payment fees, and ad cost change the budget result.
The 36.4% is not a long-run profit rate. The refund window may still be open, the cost sheet may be stale, and 52 Ads conversions may not map one-to-one to these 44 orders. It only says this sample cannot be scaled from platform revenue alone; order-level profit sampling and cost-version confirmation come first.
This week’s handoff sentence
For 2026-07-07 through 07-13, the fixed Search and Shopping campaign list above has 52 reported Ads conversions, 39 GA4 purchase events, 44 Shopify net orders, and 16 orders above the contribution profit threshold. The data owner checks conversion source, counting, consent, and transaction_id. The ads owner holds budget. Finance closes the refund window and confirms the cost version. Until then, do not call the platform gap ad incrementality or scale from Ads ROAS.
Order-level reconciliation notebook
Follow one order from click to purchase, report, and refund before asking why four tables do not always show the same number.
This is a classroom or authorized-test local record. Selecting a timeline, moving the window, entering fields, calculating, and exporting never changes a Google Ads conversion action, attribution model, window, budget, GA4, Shopify order, refund, or consent.
One-order timeline
Choose a classroom timeline first. It separates click date, purchase date, GA4 event date, Ads conversion time, order state, and refund instead of treating any one as global truth.
Order-level reconciliation notebook
- Ad click
- May 1 at 09:12: a test visitor clicks a Google Ads ad. Record campaign ID, final URL, whether a click ID is present, and the Ads-account timezone without entering real customer identity.
- Purchase
- May 7 at 19:36: classroom order alias
T-2047completes payment in Shopify. It is the order-fact starting point, not automatic proof of Ads, GA4, or profit attribution. - GA4
- GA4 should record
purchase,transaction_id,value,currency, session source or campaign, and event date in the property timezone. Do not treat the GA4 date as the Shopify payment date by default. - Google Ads
- Google Ads should record conversion action, conversion time, attribution model, conversion window, and the report-date basis. A chart date may not be the Shopify-order creation time.
- Shopify
- Shopify should read order ID, financial status, paid at, currency, discounts, current order amount, and export row. It proves the order and payment state, not credit allocation for the ad platform.
- Refund and finance
- When a partial refund occurs on May 13, record refund amount, refund date, sales basis, and cost treatment separately. Do not treat the refund as a new ad conversion or assume all four tables update together.
- Classroom boundary
- This classroom timeline practices fields and sequence only. It does not prove any real-account setting, refund treatment, attribution, revenue, profit, or budget conclusion.
- Ad click
- May 1: record the same kind of test click and click ID. State the test Ads account, campaign scope, and timezone for the click time first.
- Purchase
- June 2: classroom order alias
T-2088pays only then. The click-to-purchase lag is 32 days and must not be rewritten as a same-day order. - GA4
- GA4 should record the purchase in its own property timezone and event time, while preserving source, medium, campaign, transaction ID, and any data-gap boundary.
- Google Ads
- Whether Google Ads records this conversion depends on the relevant conversion action window and attribution settings. Moving the classroom slider changes neither a real window nor historical reporting.
- Shopify
- Shopify still treats order, payment, and refund state as fact. The order does not disappear because an Ads window is shorter.
- Refund and finance
- Finance must reread revenue, refunds, costs, and ad spend in the declared date window and same currency. Do not compare ROAS from screenshots using different windows directly.
- Classroom boundary
- A window affects how a conversion action is counted in Ads reporting. It does not alter whether Shopify has an order or automatically explain GA4 or profit gaps.
The selected timeline keeps the click-to-purchase lag visible. Choose a 1–90 day classroom window below; the slider tests whether that example's purchase date falls inside it. It does not change an Ads conversion action, report, or stored platform history.
Classroom conversion-window comparison
Try changing these numbers.
Use the full 1–90 day range to compare the two example timelines. This is not a recommendation for the real conversion action.
Selected classroom window
Does this classroom purchase fall inside the selected window?
Day 6 falls outside this example window
Note
Day 6 falls inside this example window
Day 32 falls inside this example window
Day 32 falls outside this example window
Order-level reconciliation gates
Order-level reconciliation notebook
Start with item 1; your choices in the exercises above are carried over.
From the exercise above · 3 items
- Order-level reconciliation notebook
- Classroom order A: purchase on day 6, then partial refund
- Classroom window
- 30
- When Ads, GA4, and Shopify disagree, what should you record before changing a conversion or budget setting?
- Not yet recorded
Write classroom or authorized-test account, campaign ID, name, date range, and exclusions. Do not enter account credentials or customer identity.
Separately write click time, Shopify payment or order time, Ads conversion time, and the days between them.
Write Ads-account, GA4-property, Shopify, and finance timezones, plus whether each report displays click, conversion, or order date.
Write transaction ID, purchase, value, currency, source or campaign, event date, and any explicit data gap.
Write order alias, financial status, paid at, current total, refund status, refund amount, and export or admin readback location.
Write currency, any exchange-rate date, whether refunds are already deducted from the sales basis, and whether Ads value, Shopify, and finance numbers are directly comparable.
Write the conversion action, window, export field, order, or finance row to read back without changing budget, conversion, tag, order, or consent.
Write a new test session, the same scope, expected time lag, and what still needs actual-account confirmation.
Not saved yet.
Kept in this browser only. Switching device or clearing browser data removes it; download a copy.
Reconciliation fault exercise
When Ads, GA4, Shopify, or finance numbers differ, which action preserves evidence without changing production state just to make reports look better?
Order-level reconciliation notebook
Self-check not answered
Classroom profit ROAS worksheet
The default numbers are classroom examples only. They compare Ads value, Shopify sales basis, and declared variable costs to ask better questions, not to replace accounting definitions, currency treatment, taxes, shared costs, or budget approval.
Classroom ROAS and contribution calculation
Try changing these numbers.
Use the same campaign, date range, and currency as the other example values.
This is the conversion action's reported value, not verified incremental revenue.
State whether refunds and cancellations have already been deducted.
Include only the named costs and avoid counting an item twice.
Ads-value ROAS
Shopify-sales ROAS
Contribution before ads
Contribution after ads
Classroom contribution / ad-spend ratio
With the defaults, Ads value ROAS is 4.00, Shopify-sales ROAS is about 3.67, contribution before ads is $710, and after ad spend it is $230. The last ratio is about 0.48. The figures use a classroom record; a different refund basis, fee treatment, date range, or currency changes the interpretation.
Save the classroom values
The four calculator inputs are part of the saved lesson record. Save them only after writing the sales and cost definitions; a saved arithmetic worksheet still does not establish actual account performance.
Classroom contribution worksheet
Start with item 1; your choices in the exercises above are carried over.
Use the bound inputs above to save or restore this worksheet. Record the date range, campaign scope, currency, refund treatment, and included costs in the main reconciliation record before sharing the result.
From the exercise above · 4 items
- Ad spend
- 480
- Ads-attributed value
- 1,920
- Shopify sales basis
- 1,760
- Declared variable costs
- 1,050
Not saved yet.
Kept in this browser only. Switching device or clearing browser data removes it; download a copy.
First state currency, exchange-rate date, whether refunds are already deducted from the sales basis, and what variable costs include. Without those premises, this worksheet is arithmetic, not a profit conclusion.
Fillable order-level reconciliation record
Use only classroom aliases or authorized test references. Real buyers, payments, addresses, admin screenshots, click IDs, and access credentials must stay in an authorized working environment.
Scope of the order-level reconciliation
The original reference record is dated 2026-07-26. They help check windows, attribution, order exports, and data logic across reports. They do not replace same-account, order, currency, or finance-definition readback.
30-minute GA4 x Ads report review
Use the reconciliation record to locate the layer where a difference begins, then carry the same date/timezone basis or attribution window and the definition of a valid order into the four-step field reconciliation. Keep the evidence chain intact before deciding whether to repair a definition, fill an evidence gap, or hold the budget move.
Practice
0-5 min
- Problem
- Define the question first: spend efficiency, conversion source, landing-page quality, revenue value, or campaign naming. Lock one question, date/timezone, campaign scope, and order state for this review.
- Evidence
- Write what Google Ads spend/conversion, GA4 purchase/landing page, Shopify net orders, and finance profit can each answer; one ROAS row cannot replace the four evidence layers.
- Action / output
- Write the question, campaign scope, and date/timezone into the reconciliation notebook/workbench record, then output the review question and responsible lead.
5-10 min
- Problem
- Confirm the GA4 property, Google Ads account, link state, and report entry are the same primary path; also check whether auto-tagging and GCLID are preserved.
- Evidence
- Read back the GA4 and Ads account/property names, link page, auto-tagging switch, GCLID in the landing URL, and whether usable report rows exist.
- Action / output
- If identity, access, GCLID, or report availability differs, mark an account/link or click-receipt blocker; write the evidence and blocked move into the notebook before budget judgment.
10-16 min
- Problem
- Identify whether the action originates from a GA4 import, Google Ads tag, or offline import. Check separately whether enhanced conversions supplements it, and look for duplicate bidding signals.
- Evidence
- Inspect conversion-action source, primary/secondary status, counting, value, GA4 key-event import state, and offline order-ID/click-ID records.
- Action / output
- Output the single primary conversion source and repair items; if primary signals duplicate, pause the wrong bidding signal and record the owner and retest condition.
16-23 min
- Problem
- Split the post-click loss: landing page, device, country, event chain, add-to-cart, checkout, or purchase. Do not guess from the total-conversion row.
- Evidence
- Read GA4 by landing page, device, and country, then follow view_item → add_to_cart → begin_checkout → purchase with the same date, campaign, and consent boundary.
- Action / output
- Route the issue to page, funnel, checkout, event, or UTM work; write the evidence-backed next check in the notebook instead of changing bids first.
23-28 min
- Problem
- Return to backend order truth: can the attributed Ads read survive Shopify orders, refunds, discounts, payment fees, shipping, and margin checks?
- Evidence
- Sample Shopify order IDs, net orders, refunds/cancellations, discounts, shipping, payment records, and contribution profit; state currency, sales basis, and profit window.
- Action / output
- Output one of “safe to scale / directional only / repair order or profit definitions first,” then write the stop line and reread date back to the notebook/workbench.
28-30 min
- Problem
- Route the conclusion to the right next owner: Ads, page, events, UTM, finance, or attribution, rather than leaving every gap with the media owner.
- Evidence
- Review the fixed window, evidence gaps, owners, blocked moves, and reproducible retest conditions from the first five segments; leave any unexplained layer unaccepted.
- Action / output
- Write one next step, owner, and review time in the notebook’s safe-next-step/retest note; allow budget, import, or business conclusions only after the evidence chain closes.
Write the four system roles before reading the report
Different dashboard numbers do not mean one platform is simply wrong. First decide what each system answers, then explain the gap. This keeps teams from looking for campaign controls in GA4 or true profit proof in Ads.
Practice
Google Ads
- Owns
- Spend, clicks, impressions, search terms, bidding, campaign structure, and platform-attributed conversions.
- Do not use for
- Do not use it alone to prove true store profit or every channel contribution.
- Evidence
- Ads account, conversion actions, bid strategy reports, search terms, and campaign / ad group dimensions.
GA4
- Owns
- On-site behavior quality, landing-page fit, event chain, cross-channel comparison, audiences, and path reading.
- Do not use for
- Do not treat it as the campaign console or force it to match Ads transaction by transaction.
- Evidence
- Acquisition, Advertising, Explore, Google Ads dimensions, landing page, device, country, and event chain.
Shopify
- Owns
- Real orders, refunds, customers, products, net sales, and fulfillment state.
- Do not use for
- Do not use it to explain the post-click page behavior path.
- Evidence
- Order ID, refunds, products, discounts, shipping, support, and margin reconciliation.
Finance sheet
- Owns
- Ad cost, payment fees, shipping cost, refunds, margin, and cash outcome.
- Do not use for
- Do not use it as a replacement for GA4 page and event diagnosis.
- Evidence
- Weekly profit sheet, order-cost samples, refund/dispute records, and channel budget review.
Ads report reconciliation
Put one campaign across four tables instead of asking which dashboard is right.
A real review is not just “Ads and GA4 do not match.” Read Google Ads, GA4, Shopify, and finance together, then write the first diagnosis, safe action, and blocked move.
Ads report reconciliation
- Google Ads
- Google Ads shows 52 weekly conversions from Search and Shopping. Read conversion action source, counting, and attribution window first.
- GA4
- GA4 shows 39 purchases, with a sharper mobile
begin_checkout -\> purchasedrop. The total purchase count is not enough. - Shopify
- Shopify has 44 net orders after cancellations, between Ads and GA4, but discounts, refunds, and order time need sampling.
- Finance
- The finance sheet shows only 16 orders passing the contribution-profit line, because shipping, discounts, and refunds eat much of the revenue that looked efficient.
- First diagnosis
- This is a mixed window, conversion-source, value, and post-click quality gap, not simply “GA4 is wrong” or “Ads is wrong.”
- Safe action
- Align date, timezone, conversion source, and value first, then split mobile checkout in GA4 and ask finance to review a 20-order profit sample.
- Blocked move
- Do not cut the campaign just because GA4 is lower, and do not scale only because Ads ROAS looks good.
- Next team
- Ads, GA4, and finance review the case together.
- Google Ads
- Ads ROAS hits target and the platform suggests more budget. That only says platform-attributed revenue looks efficient.
- GA4
- GA4 revenue and purchases are close to Ads, with no obvious event loss, but GA4 does not prove full product cost, shipping, or refunds.
- Shopify
- Shopify shows higher refunds, discount use, and exchange questions, with some orders driven by heavy discounts.
- Finance
- After COGS, shipping, payment fees, refunds, and ad spend, contribution profit is below the scale threshold.
- First diagnosis
- This is not proof that traffic quality passed. Revenue definition and profit definition are being mixed.
- Safe action
- Put this campaign into the profit review sheet. Split by SKU, discount, refund, and shipping, then set a contribution-profit scale line.
- Blocked move
- Do not add budget on Ads ROAS alone. If the profit line fails, more budget increases cash pressure.
- Next team
- Finance / operations gives the profit line first, then the Ads lead decides the budget move.
- Google Ads
- Google Ads clicks, CPC, and CTR are in a normal range, and search terms are not clearly off-target.
- GA4
- GA4 shows low mobile engagement and a
view_item -\> add_to_cartbreak, suggesting a landing-page or promise mismatch. - Shopify
- Shopify orders are low, while support notes mention price, shipping, variant choice, and delivery-time questions.
- Finance
- Finance does not have enough orders to judge profit yet. The priority is post-click fit, not ROAS.
- First diagnosis
- Ads may be bringing people in, but the page, product facts, mobile experience, or promise is not carrying them forward.
- Safe action
- Move to landing-page analysis: check hero promise, product price, shipping, mobile buttons, variant selection, and add-to-cart path.
- Blocked move
- Do not change bidding strategy first. If post-click evidence fails, a bidding change only renames the problem.
- Next team
- Page / CRO lead owns the fix, while the Ads lead provides keyword, creative, and landing-page context.
- Google Ads
- Google Ads shows campaign, ad group, keyword, and conversion actions normally.
- GA4
- GA4 splits one campaign into google / cpc, paid search, referral, or several manual UTM rows.
- Shopify
- Shopify orders exist, but landing-page parameters, redirects, and pre-checkout source records are unstable.
- Finance
- Finance cannot allocate spend and revenue by campaign reliably because naming definitions are dirty.
- First diagnosis
- This is first a tagging, redirect, or UTM governance problem, not an ads-performance conclusion.
- Safe action
- Check whether an auto-tagged GCLID / DCLID is usable, whether manual source labels are mixed in, and whether redirects preserve the IDs; route source governance to the UTM lesson.
- Blocked move
- Do not compare channel efficiency from polluted source / campaign rows, and do not rush to rename historical data.
- Next team
- Data / UTM lead and Ads lead repair link rules together.
Field-level reconciliation notes
Four tables are not a concept. They must land on fields.
The smallest unit of reconciliation is not whether Ads is right. It is the field. Choose one gap record, then write the fields required from Google Ads, GA4, Shopify, and finance. If the fields are incomplete, pause budget action.
One more check can change the reconciliation: if an intervention changes both revenue per impression and the number of impressions, a platform revenue gap is not a long-term ad-effect estimate. In a stylized auction model, Causal Inference on Stopped Random Walks in Online Advertising first randomly splits users at q / (1−q), then splits each advertiser’s budget proportionally. The design estimates the publisher’s auction advertising revenue, not a merchant’s store sales or profit; the paper is theoretical and has no empirical dataset. In the transfer board, flag whether exposure volume, budget, or the intervention will change; if so, record the comparison, observation window, and stopping/error rule separately from the report gap.
Field-level reconciliation notes
Why do Google Ads conversion count, GA4 purchases, and Shopify net orders disagree?
- Google Ads
- Conversion action, source, primary / secondary, counting method, attribution window, conversion time, and conversion value.
- GA4
- Key event, purchase count, transaction_id, source / medium, campaign, event_date, device, and country.
- Shopify
- Order ID, created_at, financial status, cancelled / refunded status, net orders, discount code, and source order note.
- Finance
- Net sales, refund reserve, ad spend, order-sample count, reconciliation date, and gap explanation.
- Field stop rule
- If date/timezone, conversion source, or order state is not aligned, pause budget judgment and align definitions first.
Why does Ads ROAS look strong while contribution profit does not support scaling?
- Google Ads
- Conv. value, cost, ROAS, campaign, asset / product group, bid strategy, and budget change record.
- GA4
- Purchase revenue, item_id, item_name, coupon, discount, shipping/tax definition, and refund event.
- Shopify
- Gross sales, discounts, returns, refunds, shipping charged, payment status, and SKU / variant.
- Finance
- COGS, shipping cost, payment fee, refund reserve, discount cost, ad spend, and contribution profit.
- Field stop rule
- If contribution profit is below the scale line, do not add budget on Ads ROAS; fix offer, SKU, shipping cost, or refund reason first.
Clicks, CPC, and CTR look normal, so why do GA4 and Shopify fail to carry them?
- Google Ads
- Campaign, ad group, keyword / search term, final URL, CTR, CPC, cost, device, and landing page asset.
- GA4
- Landing page, device, country, engagement rate, view_item, add_to_cart, begin_checkout, and purchase.
- Shopify
- Orders by landing offer, cart notes, abandoned checkout, support tags, shipping question, and variant-selection issue.
- Finance
- When order sample is thin, record the observation window only; when enough orders exist, read AOV, refunds, shipping subsidy, and SKU margin.
- Field stop rule
- Before the GA4 event chain or page fit passes, do not change bidding first; route to landing-page or funnel lessons.
Google Ads looks normal, so why are GA4 source / campaign and finance allocation messy?
- Google Ads
- Auto-tagging status, final URL, tracking template, campaign ID, ad group ID, and click-ID setting.
- GA4
- Session source / medium, campaign, Google Ads campaign, gclid presence, and landing page + query string.
- Shopify
- Landing page parameters, checkout source note, order attribution note, and UTM fields from marketing reports.
- Finance
- Campaign cost allocation, manual adjustment note, unallocated revenue bucket, and next naming-governance date.
- Field stop rule
- When source / campaign is polluted, do not compare channel efficiency from those rows; fix auto-tagging, redirects, and UTM templates first.
Click ID break checks
Turn “Ads has the order, GA4 does not recognize it” into one real order path.
Click ID is not a mysterious field. Think of it as the receipt number for an ad click: it connects the ad click, GA4 session, Shopify order, and later conversion import. Pick the closest case and use the right panel to decide which link to check first.
Click ID break checks
A shopper clicks a Google Ads ad for a 20oz tumbler and later places a Shopify order. Google Ads sees its click and conversion, but GA4 does not recognize the session as Google Ads.
- Ads sees
- Ads may show a click, conversion, or imported conversion because it can still recognize part of the ad-click or conversion-action signal.
- GA4 misses
- In GA4, the traffic may fall into direct / none, unassigned, or rows without Google Ads campaign dimensions.
- Shopify truth
- Shopify proves the order exists, not which ad owns it. Finance should place it in a temporary “click ID loss pending repair” bucket.
- Why it happens
- The common cause is GCLID getting dropped by short links, geo redirects, redirect apps, parameter cleanup, or landing-page redirects. The click ID is like a receipt number; once it is gone, GA4 struggles to join the click and session.
- First checks
- Use one real test click to check whether final URL, tracking template, short link, redirect chain, and final landing page preserve
gclid. - Repair move
- Fix parameter preservation first, then reread Ads / GA4 / Shopify. Before repair, do not treat direct / none as organic growth or call ads ineffective just because GA4 cannot see campaign.
- Write back to copyable lesson notes
- Order gap: Ads recognizes the order, GA4 does not recognize the Google Ads session; first check whether GCLID is lost in the redirect chain.
The shopper pays and Shopify has an order ID, but GA4 has no matching purchase, or transaction_id, value, and currency do not match.
- Ads sees
- Ads may still show a conversion from its own website tag or an offline import. Enhanced conversions can improve matching for an existing action; they do not add a separate conversion source.
- GA4 misses
- GA4 is missing the ecommerce event, not only the ad dimension. The issue may be Shopify Customer events, checkout pixel, purchase event, or transaction_id.
- Shopify truth
- The Shopify order is the business fact, but it does not automatically fix GA4 purchase. Finance can book the order from Shopify while attribution waits for GA4 or import repair.
- Why it happens
- Common causes: purchase did not fire, fired on the wrong page, order ID differs, currency/value version differs, or checkout scripts are blocked by privacy or pixel settings.
- First checks
- Take 5-10 Shopify order IDs and compare GA4 transaction_id, purchase time, value, currency, and DebugView / Realtime evidence.
- Repair move
- Fix purchase event and transaction_id before importing the GA4 key event into Ads; do not feed bad value into automated bidding.
- Write back to copyable lesson notes
- Order gap: Shopify has an order but GA4 has no purchase; fix purchase event, transaction_id, value, and currency first.
The team uploads orders back to Google Ads and the upload looks successful, but GA4 cannot find the same Google Ads session, and Shopify / finance cannot allocate the order to the right campaign.
- Ads sees
- Ads reads conversion action, conversion time, GCLID / GBRAID / WBRAID, value, and currency from the upload file.
- GA4 misses
- GA4 may not have the same transaction_id, or source / medium, campaign, and purchase time do not match the uploaded row.
- Shopify truth
- Shopify order ID, net sales, refund, and customer type are the order facts; finance must confirm whether uploaded value is gross sales, net sales, or contribution profit.
- Why it happens
- Offline import is not “uploaded means attributed correctly.” If click ID, order ID, time window, value version, or account ID is off, Ads may recognize a conversion while GA4 / Shopify cannot reconcile it.
- First checks
- Run a 10-order shadow import first: row-by-row check click ID, order ID, conversion time, value, currency, import status, and Shopify order.
- Repair move
- Before failure reasons are clear, treat offline import as a test signal only; do not feed it into automated bidding or delete failed samples from the review.
- Write back to copyable lesson notes
- Order gap: offline import makes Ads recognize the order, but GA4 / Shopify cannot reconcile it; run a 10-order shadow import first.
Naming and click ID checks
Pick one pollution symptom first. Do not use dirty campaign rows for budget decisions.
Google Ads, GA4, Shopify, and finance are often not “wrong”; naming, redirects, click IDs, or offline import fields split the same traffic apart. Choose the closest symptom, then repair from the evidence panel.
Naming and click ID checks
- Observed symptom
GA4 may split the same traffic into different source or campaign rows. When a usable auto-tagged GCLID / DCLID is present, Analytics uses the auto-tagged source, medium, and channel classification; manual utm_content / utm_term can still appear as dimensions. If those click IDs cannot be used and any UTM is present, cross-channel values fall back to the UTMs.
- Google Ads
- Check auto-tagging status, final URL, tracking template, campaign ID, ad group ID, and whether the click IDs are usable alongside manual UTM fields.
- GA4
- Check Session source / medium, Session campaign, Google Ads campaign, landing page + query string, and whether GCLID / DCLID is present and usable. Manual utm_content / utm_term can remain as dimensions.
- Shopify / Finance
- In Shopify marketing reports and the finance allocation sheet, merge these variants into “Google Ads traffic pending governance” before comparing channel efficiency.
- Repair move
- First verify that GCLID / DCLID survives and is usable. If it is, keep source / medium consistent and use content / term UTMs for detail. If those IDs cannot be used, restore the click-ID path or apply a consistent UTM scheme across channels; do not strip every UTM blindly.
- Blocked move
- Do not use polluted source / campaign rows to decide whether Google Ads should scale or cut spend.
- Write back to copyable lesson notes
- Source definitions mixed: check usable GCLID / DCLID first, then keep cross-channel UTMs consistent and review GA4 source / campaign rows.
- Observed symptom
Ads has clicks and conversions, but part of paid traffic becomes direct / none, unassigned, or lacks Google Ads dimensions in GA4.
- Google Ads
- Use a real ad click or test URL to check whether final URL, tracking template, short link, redirect app, geo redirect, and landing page preserve gclid.
- GA4
- Compare landing page + query string, Session default channel group, Google Ads campaign, Ads click count, and purchase path.
- Shopify / Finance
- Mark Shopify order source, checkout attribution notes, and finance unallocated revenue bucket as “click ID loss pending repair” instead of assigning them to organic traffic.
- Repair move
- Fix redirect parameter preservation and ask the developer or app owner to prove gclid exists on the final landing page. Until then, use directional judgment only, not scaling.
- Blocked move
- Do not say ads contributed nothing just because GA4 cannot see the Google Ads campaign, and do not treat direct / none as organic growth.
- Write back to copyable lesson notes
- Click ID issue: redirect chain drops GCLID; fix parameter preservation before redoing Ads / GA4 / Shopify reconciliation.
- Observed symptom
Offline import shows successful or partially successful uploads, but Ads reports unknown click, old identifier, wrong account, or value / currency mismatch.
- Google Ads
- Check GCLID / GBRAID / WBRAID, conversion time, conversion action, order ID, value, currency, and import status in the upload file.
- GA4
- Use GA4 transaction_id, purchase time, source / medium, and Google Ads campaign to judge whether the order belongs to the same click window.
- Shopify / Finance
- Shopify order ID, net sales, refund, customer type, and finance value version must match the upload file.
- Repair move
- Run a 10-order shadow import reconciliation first. Upload in bulk only after failure reasons are clear; do not feed bad value into automated bidding.
- Blocked move
- Do not treat upload success rate as value quality, and do not remove failed samples from the review.
- Write back to copyable lesson notes
- Offline import issue: click ID / order ID / value version mismatch; run a 10-order shadow import before automated learning.
- Observed symptom
After Google Ads campaign structure changes, GA4, Shopify exports, and finance sheets still use old campaign names, splitting one budget into several profit buckets.
- Google Ads
- Record campaign ID, campaign name, change history, rename date, manager account, and original spend rows.
- GA4
- Use Google Ads campaign ID / campaign name, Session campaign, source / medium, and date window to confirm the switch point between old and new names.
- Shopify / Finance
- The finance sheet should use campaign ID as the key and campaign name as a label; merge old and new names in the same budget review.
- Repair move
- Create a campaign naming change log: when it changed, who changed it, why, and from which date finance should display the new name.
- Blocked move
- Do not cut budget just because name splitting makes one campaign bucket look unprofitable.
- Write back to copyable lesson notes
- Naming drift: finance allocation must use campaign ID as the key, and rename history must go into the change log.
Tool handoff
Keep observed report values separate from the calculator model
The reconciliation notebook keeps GA4 purchase/value, Shopify net sales/refunds, and finance costs as separate evidence. The ROAS tool models unit price, per-order total cost, ad spend, target ROAS, and its fee/discount options. It returns modeled net profit, break-even ROAS, and break-even CPA. It does not import the notebook’s Ads or Shopify values, diagnose tracking, or calculate this lesson’s contribution-to-ad-spend ratio. Copy assumptions into the tool only after you have declared what each value means.
Tool write-back
- Bring into the tool
- Enter the supported inputs: unit price, per-order total cost, ad spend, target ROAS, and the available fee / discount options. Keep GA4 revenue and Shopify net sales in the notebook for manual comparison.
- Tool output
- The current calculator models target ROAS, modeled net profit, break-even ROAS, and break-even CPA. It does not return tracking diagnosis or contribution-to-ad-spend ratio.
- Write back to the team
- Write back to the copyable lesson notes: whether this campaign group can scale, needs definition repair, or should stay in an observation window.
- Hold line
- Do not add budget when profit ROAS misses the line, Max CPA is below true CPA, or Shopify / finance does not support Ads conv. value.
- Tool link
- /tools/roas
- Tool label
- Open the ROAS tool
- Bring into the tool
- Enter product cost, logistics cost, target CPA, fee rate, unexpected-cost rate and target margin in the corresponding fields. Use the relevant scenarios for discount, promotion, shipping or return assumptions. Keep actual SKU price, current CPA, refund reserve and the affected SKU / product group in the reconciliation record for comparison; they are not direct inputs to the base pricing form.
- Tool output
- The Pricing tool models price, promotion, shipping, and return contribution scenarios. Target CPA is an input; allowable CPA and the final SKU decision remain team calculations.
- Write back to the team
- Write back to the ads review: fix offer, SKU, shipping cost, or refund reason before deciding whether to scale.
- Hold line
- Pause scaling when cost fields are missing, low-margin SKUs drive most conversion value, or discounts / free shipping cross the profit boundary.
- Tool link
- /tools/pricing
- Tool label
- Open the Pricing tool
- Evidence to keep outside the tool
- Primary / secondary status, conversion source, click IDs, GA4 key event, Shopify orders, finance profit, and their date / currency scope remain in the notebook for human review.
- Do not expect this output
- The ROAS calculator does not classify tracking issues or recommend a campaign action. Use the written evidence and responsible owners to decide whether to repair definitions, hold, or continue observation.
- Write back to the team
- Write back to the team task: the hold is not stopping learning; it prevents bad signals from entering bidding and budget.
- Hold line
- Do not change bidding strategy until conversion source, primary status, click ID, and order reconciliation are accepted.
- Tool link
- /tools/roas
- Tool label
- Use the ROAS tool to check the hold line
ROAS Calculator
Model unit price, per-order total cost, ad spend, target ROAS, and the available fee / discount inputs. Keep Google Ads value, GA4 purchase value, Shopify net sales, and refunds in the reconciliation record because the tool does not import them.
Product Pricing Calculator
Use the supported product-cost and pricing assumptions for SKU or offer sensitivity. Keep campaign IDs, click IDs, attribution source, observed orders, and refund records in the team’s evidence sheet.
Define two terms before using the report
Here we use Feed and contribution profit. They are not decorative terms: one controls the product facts ad platforms read, and the other decides whether strong ROAS actually makes money.
Practice
Feed
- Plain meaning
- A feed is the product data stream that ad platforms read. For Google Ads, it usually comes from Merchant Center and carries product title, price, availability, image, GTIN, shipping, and custom labels.
- Where you see it
- You see it in Merchant Center, Shopping / PMax product ads, GA4 item dimensions, and product-page follow-through checks.
- What breaks
- When the feed is wrong, ads can show the wrong product, price, or availability. GA4 may show weak post-click behavior, but the real cause is bad product facts.
Contribution profit
- Plain meaning
- Contribution profit is not a default GA4 metric. It is usually revenue minus product cost, shipping, payment fees, refunds, discounts, and ad spend, leaving the amount that supports fixed cost and cash flow.
- Where you see it
- It is usually calculated in a finance sheet, profit review, or SKU profit table, not proven inside GA4 or Google Ads alone.
- What breaks
- If the team only reads Ads ROAS and ignores contribution profit, it can scale traffic that looks efficient while losing money.
Run the 30-minute review
0–5 min
Freeze one comparison question
State the date range, timezone, campaign, order state, currency, and which of the four evidence layers owns the question.
How to confirm
Use the same fixed sample before comparing platform counts or revenue.5–16 min
Check account and conversion definitions
Confirm the linked account, report timing, click-ID path, conversion source, counting method, primary / secondary role, and campaign goal.
Keep as evidence
Record the action and its source. A GA4 key event is not an Ads conversion action until it is imported.16–28 min
Trace post-click quality and order truth
Split GA4 by landing page, device, country, and event chain, then sample Shopify order, refund, discount, shipping, and cost evidence.
Caution
Keep unresolved event, order, refund, and profit layers separate instead of forcing their totals to match.28–30 min
Write a handoff and next review
Name the evidence gap, owner, safe next check, blocked move, and date to review the same scope again.
You should see
The review ends with one owner and a reproducible check, not an unsupported bid or budget change.
Pass five evidence gates before linking
Linking GA4 and Google Ads is not the final step; it puts both systems into one workflow. If permission, auto-tagging, conversion source, events and values, and Consent Mode boundary are not accepted, report gaps get misread as media problems.
Practice
| Item | Why | Proof |
|---|---|---|
| Permission and account | GA4 needs property access and Google Ads needs administrative access; linking an old account makes every later read wrong. | GA4 Admin Google Ads links record with the active account ID, manager account, link time, and whether the 48-hour window has passed. |
| Auto-tagging and redirects | Google Ads auto-tagging adds GCLID; redirects, landing-page parameter cleanup, or third-party hops can drop it and dirty the Ads-to-GA4 link. | One real click test where the final landing page keeps gclid; for iOS / app cases, also record whether GBRAID or WBRAID enters the offline-import fields. |
| Conversion source | One purchase should not affect bidding through both GA4 import and Google Ads tag as primary conversions. | Google Ads conversion actions table showing whether the GA4 import has become a conversion action, plus source, primary / secondary, counting, and value source. |
| Events and values | When purchase, value, currency, or transaction_id is untrusted, Ads report gaps get misread as media problems. | DebugView, test order, next-day report, Shopify order ID, and value sample reconcile. |
| Consent Mode boundary | Consent state changes usable Ads signals, observable GA4 purchases, and remarketing audience size. | Use the previous lesson consent boundary table to name observed, modeled, and unobservable signals. |
Official boundaries: linked does not mean ready for bidding judgment
This step handles the most common GA4 and Ads misreads: report visibility timing, key event import, auto-tagging, click IDs, and offline imports. Put the boundary into evidence before discussing budget or optimization.
Practice
| Item | Boundary | Action |
|---|---|---|
| Reports are not instantly complete | The GA4 Google Ads campaigns performance report needs the property collecting data, at least one key event, and a linked Google Ads account; linked Ads data can still need time to appear. | Record link time, first visible data time, and whether the 48-hour window has passed before judging ad quality. |
| A key event is not automatically a bidding signal | A GA4 key event becomes a Google Ads conversion action only after import, and bidding impact still depends on primary / secondary status. | List conversion action source, goal, counting, value, and primary / secondary status before importing or disabling anything. |
| Lost GCLID dirties the reporting definition | When GCLID / DCLID is usable, auto-tagged values govern source, medium, and channel classification; manual content / term values can remain dimensions. If the IDs cannot be used and any UTM exists, Analytics falls back to UTM values across channels. | Use a real click test to confirm the final landing page keeps GCLID, then route failed samples to development or ads owners. |
| Offline import needs click IDs and order IDs | Offline conversion import or enhanced conversions for leads must match ad clicks. Wrong GCLID, GBRAID, WBRAID, order ID, time, value, or currency makes attribution unstable even when upload succeeds. | Record click IDs, order IDs, upload cadence, failure logs, and sample reconciliation instead of only saying “uploaded.” |
Decide the conversion source before importing into Ads
The dangerous issue is not whether a conversion exists. It is one purchase feeding bidding through several primary conversion paths. Write the source table before the system learns from it.
Practice
GA4 import
- Best use
- Import validated GA4 key events into Google Ads, often purchase or qualified lead.
- Risk
- If the GA4 event is missing, duplicated, or has wrong value, bidding receives a bad signal.
- Acceptance proof
- DebugView, test order, next-day report, and Shopify order can reconcile.
Google Ads tag
- Best use
- Use native Google Ads conversion actions to feed bidding directly.
- Risk
- If it and GA4 imported purchase are both primary conversions, one order may influence bidding twice.
- Acceptance proof
- Conversion action, counting, primary / secondary status, and dedupe rule are documented.
Enhanced conversions
- Best use
- Improve matching for an existing web or offline conversion action, especially when cookies or login state are incomplete. It enhances matching; it is not a separate purchase event or conversion source.
- Risk
- Privacy, user data, and consent boundaries must be clear; it is not magic data recovery.
- Acceptance proof
- User data fields, consent state, hashing / sending path, and Google Ads diagnostics have proof.
Offline import
- Best use
- Send backend-confirmed sales, qualified leads, or offline outcomes back to Google Ads.
- Risk
- Wrong order ID, time, GCLID/GBRAID/WBRAID, value, or currency can mismatch attribution.
- Acceptance proof
- Field dictionary, upload cadence, failure log, and sample reconciliation are recorded.
The value of GA4 for Ads: judge post-click quality
Google Ads tells you whether campaigns got clicks and platform-attributed conversions. GA4 shows whether those clicks viewed products, added to cart, started checkout, and purchased.
Practice
Landing page
- Read
- Which page the ad click lands on and whether it matches the keyword or creative promise.
- Action
- Fix target URL, hero promise, collection, or landing-page content.
- Avoid
- Do not use campaign ROAS alone to say the page is fine.
Device
- Read
- Whether mobile and desktop split on engagement, add_to_cart, and begin_checkout.
- Action
- Check mobile speed, buttons, variant selection, cart, and checkout path.
- Avoid
- Do not mistake a mobile funnel issue for a bad audience.
Country / market
- Read
- Whether some countries produce clicks but weak cart intent because shipping or promise does not fit.
- Action
- Adjust country targeting, shipping promise, currency, tax copy, or budget split.
- Avoid
- Do not average all countries into one CVR.
Event chain
- Read
- Where
view_item -\> add_to_cart -\> begin_checkout -\> purchasebreaks. - Action
- Separate traffic, page, cart, payment, and measurement problems.
- Avoid
- Do not explain the whole chain with one purchase number.
When numbers disagree, route the gap first
A gap is not a conclusion. Do not call every issue bad attribution. Route the symptom to conversion source, page quality, value definition, or naming governance first.
Practice
- First checks
- Check whether Ads tag and GA4 import both count the same purchase. Compare attribution window, counting, Consent Mode, modeling, and latency.
- Next team
- Ads lead and GA4 lead explain the reporting definition together.
- Safe action
- Write the gap explanation before changing budgets or deleting conversions.
- First checks
- Check landing page, device, country, and first-screen promise. Confirm mid-funnel events are firing; weak behavior may be weak measurement.
- Next team
- Page or CRO lead leads first, with Ads lead providing traffic context.
- Safe action
- Split page and device first; do not only scale or cut spend.
- First checks
- Check value, currency, tax, shipping, discounts, refunds, and order time. Confirm GA4, Ads, and Shopify use the same date, timezone, and order state.
- Next team
- GA4 lead and finance / operations lead reconcile together.
- Safe action
- Fix value definition before sending bad value into bidding.
- First checks
- Check whether GCLID / DCLID is usable and whether source definitions are mixed. Manual content / term values remain useful dimensions; UTM fallback applies when auto-tagged IDs cannot be used and a UTM exists.
- Next team
- Ads lead and UTM / data lead govern naming together.
- Safe action
- Move to the next UTM governance lesson instead of turning this reconciliation review into naming theory.
20oz tumbler gap reconciliation flow
Suppose Google Ads shows 52 reported conversions, GA4 shows 39 purchases, Shopify has 44 net orders, and only 16 orders pass the profit line. Do not debate which dashboard is right first. Split the window, conversion source, post-click quality, and profit truth in four steps.
Practice
1. Define the comparison window
- Question
- Are both dashboards using the same date, timezone, account, campaign, and order status?
- Evidence
- Google Ads date range, GA4 date range, Shopify order export, and refund window.
- Decision
- If windows differ, redo the comparison before any budget decision.
2. Check conversion source
- Question
- Does the Ads count come from a GA4 import, Google Ads website tag, or offline import? Are enhanced conversions enabled for that existing action?
- Evidence
- Conversion actions table, primary / secondary status, counting setting, and value source.
- Decision
- If duplicate primary signals exist, fix bidding signals before interpreting performance.
3. Split post-click quality
- Question
- After the click, is the issue landing page, device, market, cart, or checkout?
- Evidence
- GA4 landing page, device, country, view_item, add_to_cart, begin_checkout, and purchase.
- Decision
- If onsite behavior is weak, do not change bidding first; route to page, funnel, or checkout diagnosis.
4. Return to orders and profit
- Question
- Do Shopify orders, refunds, discounts, shipping, payment fees, and margin support the Ads conclusion?
- Evidence
- Shopify order sample, refund report, finance sheet, and 20-order profit sample.
- Decision
- If profit does not support it, strong ROAS is not enough to scale.
Launch acceptance: transfer the ads signal board
Practice
Google Ads links record in GA4 Admin with account ID, link time, and 48-hour sync window.
Google Ads account setting plus one GCLID click test; for offline import, record GCLID / GBRAID / WBRAID fields.
Google Ads conversion actions table confirming whether the GA4 key event has been imported as a conversion action.
Explore or Acquisition report row with dimensions, metrics, date range, and filters recorded.
Order sample or weekly profit review.
Acceptance standard: account link, conversion source, primary conversion, gap explanation, traffic quality, and backend reconciliation all have a responsible lead, proof, and next review date.
Copyable lesson notes
This block updates from the selected gap route, field ledger, and checked evidence. When sharing it with ads, page, data, or finance leads, do not only send a report view. Send the pressure, first evidence, blocked move, blocked conclusion, missing evidence, field ledger, and review window.
Copy this Ads reconciliation handoff
Review question: GA4 × Google Ads reports System roles: Google Ads owns delivery and platform conversion reporting; GA4 shows observed on-site behavior; Shopify records orders and refunds; finance defines costs and contribution. Selected gap route: Google Ads conversions are high, GA4 purchases are low First checks: (to fill in) First safe action: (to fill in) Reconciliation case: 20oz tumbler: Ads 52, GA4 39, Shopify 44, profit 16 Ads evidence: (to fill in) GA4 evidence: (to fill in) Shopify evidence: (to fill in) Finance evidence: (to fill in) First diagnosis: (to fill in) Reconciliation-case action: (to fill in) Blocked move: (to fill in) Field-level record: Conversion-count gap notes Ads fields: (to fill in) GA4 fields: (to fill in) Shopify fields: (to fill in) Finance fields: (to fill in) Field stop rule: (to fill in) Selected order timeline: Classroom order A: purchase on day 6, then partial refund Timeline click evidence: (to fill in) Timeline purchase evidence: (to fill in) Timeline refund / finance evidence: (to fill in) Classroom window days: 30 Selected timeline-window verdict: Day 6 falls inside this example window Selected reconciliation decision: (to fill in) Campaign scope: (to fill in) Click, purchase, and conversion time: (to fill in) Timezone and report date: (to fill in) GA4 event evidence: (to fill in) Shopify order and refund evidence: (to fill in) Currency and sales basis: (to fill in) Safe next step: (to fill in) Isolated retest note: (to fill in) Recorded reconciliation gates: (to fill in) Ads-order gap case: Ads says order, GA4 turns it into direct / none Why it happens: (to fill in) First checks: (to fill in) Repair follow-up: (to fill in) Click-ID / naming case: Manual and auto-tagged source definitions are mixed Observed symptom: (to fill in) Naming repair: (to fill in) Click-ID stop rule: (to fill in) Tool path: Ads ROAS profit check: bring platform ROAS into the ROAS tool Tool inputs or reconciliation preparation: (to fill in) Tool output or limit: (to fill in) Budget hold rule: (to fill in) Ad spend: 480 Ads-attributed value: 1,920 Shopify sales basis: 1,760 Declared variable costs: 1,050 Ads-value ROAS: 4 Shopify-sales ROAS: 3.6667 Contribution before ads: 710 Contribution after ads: 230 Classroom contribution / ad-spend ratio: 0.4792 Launch acceptance checks: (to fill in) Weekly check: verify conversion source, primary / secondary status, click-ID preservation, landing page / device / country / event chain, then reconcile Shopify and finance. Stop before bidding or scale if purchase, value, currency, transaction_id, consent, click ID, offline import, refund window, or contribution-profit evidence is unresolved. Missing evidence and owner: name which layer is missing—Ads, GA4, Shopify Orders, or finance—and who will fill it. Review date: write a 48-hour reread or a seven-day review before the next budget decision. Keep date range, timezone, campaign scope, order state, and profit sheet consistent.
Official source boundary map
Practice
| Source | Can prove | Cannot prove |
|---|---|---|
| Link Google Ads and Analytics | Proves the GA4 and Google Ads linking path, permission, and import entry. | Does not prove the linked account is ready for budget judgment. |
| Import Google Analytics conversions | Proves GA4 key events / conversions can be imported into Google Ads. | Does not prove purchase event quality, value, or bidding signal readiness. |
| About auto-tagging | Proves the click ID mechanism and the receipt role of GCLID. | Does not prove redirects, UTMs, checkout, or app paths preserved parameters. |
| Google Ads dimensions in Analytics | Proves how to read campaign, source, medium, ad group, and related dimensions in GA4. | Does not prove those dimension rows are order truth or profit truth. |
| About conversion actions | Proves the bidding role of primary / secondary conversion. | Does not prove the conversion action has healthy profit or refund quality. |
| Missing Ads data in GA4 | Proves the 48-hour synchronization window and common missing-data causes. | Does not prove the attribution truth for a specific store. |
| Offline import discrepancies | Proves upload diagnostics and the click ID, order ID, value, and timestamp checks. | Does not prove business profit, order quality, or bidding input is correct. |
No checkpoint finished in this lesson yet. Start with “Go to the exercise”.
Self-check not answered
Your work
- Record · Order-level reconciliation notebookNot saved
- Record · Order-level reconciliation notebookNot saved
- Note · Tool handoffNot copied
Kept in this browser only. Switching device or clearing browser data removes it; download a copy.
FAQ
- How are field-level reconciliation notes different from Ads report reconciliation?
Ads report reconciliation puts one campaign across Google Ads, GA4, Shopify Orders, and finance to read the gap. Field-level reconciliation notes turn campaign, source, click ID, order id, value, profit, next team, and next review date into fields the team can reuse.
- Why can Google Ads have the order while GA4 does not recognize it?
Common causes include the 48-hour synchronization window, lost GCLID from redirects or auto-tagging breaks, Consent boundary limits, weak purchase event quality, or offline import mismatch across GCLID / GBRAID / WBRAID and order id. Use click ID break checks before calling ads ineffective.
- What should I check first when GA4 campaign / source rows are messy?
Check auto-tagging, manual UTMs in Final URL or tracking template, redirect chains that drop GCLID, and whether finance uses campaign ID as the key. Do not make budget decisions from dirty campaign rows before naming and click ID checks pass.
- What does click ID as the receipt number mean?
It means treating GCLID / GBRAID / WBRAID as the receipt that connects an ad click to later order evidence. It does not prove profit, but it helps connect Ads clicks, GA4 sessions, Shopify orders, and offline import records.
- How do primary conversion and secondary conversion affect budget decisions?
Under a standard campaign goal, primary actions inform bidding and the Conversions column, while secondary actions are normally for observation in All conversions. A secondary action can also affect bidding if a custom goal includes it. Check the action and the campaign goal before relying on either status.
- Why should I not scale only from Ads ROAS?
Ads ROAS compares platform-attributed value with spend; it does not establish contribution profit. Reconcile net sales, refunds, costs, dates, and currency in the notebook. The ROAS tool models price, per-order cost, spend, target ROAS, fees and discounts; it returns modeled profit and break-even ROAS/CPA. Pricing compares price and cost scenarios. Neither reads GA4 or Shopify records or approves budget.
- Can I make a final decision inside the 48-hour synchronization window?
No. Inside the 48-hour synchronization window, record the symptom and first evidence, but do not scale, pause, or rename campaigns from that read alone. Reread with the same date, timezone, campaign scope, and order state after the window closes.
- What should I do when Shopify has orders but GA4 has no purchase?
Keep Shopify order truth, then check transaction_id, value, currency, items, Consent boundary, checkout / thank-you page, Google Ads conversion source, and offline import. Do not force GA4 purchase to match Shopify orders one by one.
What to learn next
Lesson boundary: workflow contract, not attribution theory
If the question is which channel truly created revenue, move to attribution and lift-testing material. If campaign names are messy, review the UTM naming dictionary before comparing campaigns. If purchase value is far from backend value, return to event QA or revenue/refund analysis.
Here we place ads-report gaps in the wider GA4 path: return to the GA4 Hub when you need to choose the question again, then follow the evidence into consent measurement or UTM governance.