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.
Spend, clicks, impressions, search terms, bidding, campaign structure, and platform-attributed conversions.
On-site behavior quality, landing-page fit, event chain, cross-channel comparison, audiences, and path reading.
Real orders, refunds, customers, products, net sales, and fulfillment state.
Ad cost, payment fees, shipping cost, refunds, margin, and cash outcome.
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.
Put the same week into four tables: 52 Google Ads conversions, 39 GA4 purchases, 44 Shopify net orders, and only 16 orders above the contribution-profit line. Align property time zone, complete dates, campaign scope, conversion source, counting, attribution window, and order state before explaining each gap.
This lesson 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.
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 campaign US_Search_Tumbler_Summer only. 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.
If the next question is “How many orders would disappear without this ad spend?”, open a separate “incrementality question” line in the transfer board; do not treat the Ads-versus-GA4 gap as the answer. Record how the comparison or control is formed, the observation window, the outcome, and the acceptable decision error first. The CRITEO-UPLIFTv2 benchmark is assembled from randomized online advertising incrementality tests with pre-treatment hashed features and post-treatment exposure, visit, and conversion outcomes; its validation checks are designed to show that treatment assignment is not predictably encoded in the feature representation while the features still retain outcome information within that benchmark. Use it to inspect evaluation design, not as evidence of this store’s incremental orders, ad effect, or feature relationships.
| Surface read | Object and definition | Direct proof | Check first | Can decide | Cannot decide |
|---|---|---|---|---|---|
| Google Ads 52 | Platform-attributed count for selected conversion actions | Conversion actions, source, count, window, and value | Only one primary purchase path | Bidding signal and campaign operation | True net orders, incrementality, or profit |
| GA4 39 | Purchase events in the complete window | transaction_id, source/medium, campaign, device, and consent | Unique event plus accepted value and currency | Post-click behavior and measurement gaps | Ads causality or financial profit |
| Shopify 44 | Net-order snapshot after selected order states | Order ID, paid/cancel/refund, item, and market | Same order-state cutoff | Transaction truth and order sampling | Click path or ad attribution |
| Profit 16 | Subset of 44 orders above the contribution-profit line | Revenue, COGS, discount, refund, shipping, fees, and ad cost | Cost version and closed refund window | Budget guardrail and profit risk | Which ad exposure caused an order |
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, US_Search_Tumbler_Summer shows Ads 52 / GA4 39 / Shopify 44 / profit-pass 16. 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.
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.
Classroom order A: purchase on day 6, then partial refund
Classroom attribution-window slider
It only demonstrates whether the order falls inside or outside the selected window. No real window, conversion action, or historical report changes.
Classroom read: purchase happens 6 days after the click, inside the current 30-day window. Actual action, model, and report-date readback are still required.
Classroom boundaryThis classroom timeline practices fields and sequence only. It does not prove any real-account setting, refund treatment, attribution, revenue, profit, or budget conclusion.
Order-level reconciliation gates
A check means the item is written into the local record. It does not mean a setting has passed or grant authority for any admin change.
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?
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.
Ads-attributed value / ad spend
Shopify sales basis / ad spend
(sales basis - variable costs - ad spend) / ad spend
sales basis - variable costs - ad spend
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.
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.
0-5 min
ProblemDefine 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.
EvidenceWrite 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 / outputWrite the question, campaign scope, and date/timezone into the reconciliation notebook/workbench record, then output the review question and responsible lead.
5-10 min
ProblemConfirm 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.
EvidenceRead 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 / outputIf 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
ProblemConfirm whether the Ads conversion number comes from a GA4 import, Google Ads tag, enhanced conversions, or offline import, and check for duplicate primary signals.
EvidenceInspect conversion-action source, primary/secondary status, counting, value, GA4 key-event import state, and offline order-ID/click-ID records.
Action / outputOutput 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
ProblemSplit the post-click loss: landing page, device, country, event chain, add-to-cart, checkout, or purchase. Do not guess from the total-conversion row.
EvidenceRead 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 / outputRoute 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
ProblemReturn to backend order truth: can the attributed Ads read survive Shopify orders, refunds, discounts, payment fees, shipping, and margin checks?
EvidenceSample Shopify order IDs, net orders, refunds/cancellations, discounts, shipping, payment records, and contribution profit; state currency, sales basis, and profit window.
Action / outputOutput 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
ProblemRoute the conclusion to the right next owner: Ads, page, events, UTM, finance, or attribution, rather than leaving every gap with the media owner.
EvidenceReview the fixed window, evidence gaps, owners, blocked moves, and reproducible retest conditions from the first five segments; leave any unexplained layer unaccepted.
Action / outputWrite 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.
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.
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.
Google Ads shows 52 weekly conversions from Search and Shopping. Read conversion action source, counting, and attribution window first.
GA4 shows 39 purchases, with a sharper mobile `begin_checkout -> purchase` drop. The total purchase count is not enough.
Shopify has 44 net orders after cancellations, between Ads and GA4, but discounts, refunds, and order time need sampling.
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 diagnosisThis is a mixed window, conversion-source, value, and post-click quality gap, not simply “GA4 is wrong” or “Ads is wrong.”
Safe actionAlign date, timezone, conversion source, and value first, then split mobile checkout in GA4 and ask finance to review a 20-order profit sample.
Blocked moveDo 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.
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 the treatment can change both revenue per impression and the number of impressions, a platform revenue gap is still not a long-term ad-effect estimate. Causal Inference on Stopped Random Walks in Online Advertising proposes, in a stylized auction model with treatment-dependent impression counts, a budget-splitting experiment to estimate a long-term total advertising-revenue effect. It has no empirical dataset and is not this store’s incremental result. 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.
Conversion action, source, primary / secondary, counting method, attribution window, conversion time, and conversion value.
Key event, purchase count, transaction_id, source / medium, campaign, event_date, device, and country.
Order ID, created_at, financial status, cancelled / refunded status, net orders, discount code, and source order note.
Net sales, refund reserve, ad spend, order-sample count, reconciliation date, and gap explanation.
Field stop ruleIf date/timezone, conversion source, or order state is not aligned, pause budget judgment and align definitions first.
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.
Ads says order, GA4 turns it into direct / none
Ads may show a click, conversion, or imported conversion because it can still recognize part of the ad-click or conversion-action signal.
In GA4, the traffic may fall into direct / none, unassigned, or rows without Google Ads campaign dimensions.
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 happensThe 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 checksUse one real test click to check whether final URL, tracking template, short link, redirect chain, and final landing page preserve `gclid`.
Write back to copyable lesson notesOrder gap: Ads recognizes the order, GA4 does not recognize the Google Ads session; first check whether GCLID is lost in the redirect chain.
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.
Manual UTMs override auto-tagging
Google Ads campaign rows look normal, but GA4 splits the same traffic into google / cpc, paid search, cpc_paid, manual campaign rows, and other variants.
Check auto-tagging status, final URL, tracking template, campaign ID, ad group ID, and whether someone manually added utm_source / utm_medium / utm_campaign to the final URL.
Read Session source / medium, Session campaign, Google Ads campaign, landing page + query string, and whether gclid is still present.
In Shopify marketing reports and the finance allocation sheet, merge these variants into “Google Ads traffic pending governance” before comparing channel efficiency.
Repair moveKeep auto-tagging and remove manual UTMs that override the definition. If creative detail is needed, use utm_content or custom parameters instead of rewriting source / medium.
Blocked moveDo not use polluted source / campaign rows to decide whether Google Ads should scale or cut spend.
Write back to copyable lesson notesNaming pollution: manual UTMs override auto-tagging; this week clean final URLs / tracking templates, then reread GA4 Google Ads campaign rows.
The Ads report should write back into ROAS / Pricing, not stop at a report view.
After fields are aligned, choose one tool path. It tells you what data to bring, what the tool should output, and when strong Ads ROAS is still not enough to scale budget.
Google Ads cost, conv. value, campaign / ad group / product group, GA4 purchase revenue, Shopify net sales, refund reserve, variable cost rate, target ROAS, and the same date window.
Revenue ROAS, profit ROAS, break-even ROAS, Max CPA, and the gap between Ads conv. value and Shopify net sales.
Write back to the copyable notes: whether this campaign group can scale, needs definition repair, or should stay in an observation window.
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.
Define two terms before using the report
This lesson uses 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.
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.
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.
GA4 needs property access and Google Ads needs administrative access; linking an old account makes every later read wrong.
Proof: GA4 Admin Google Ads links record with the active account ID, manager account, link time, and whether the 48-hour window has passed.
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.
Proof: 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.
One purchase should not affect bidding through both GA4 import and Google Ads tag as primary conversions.
Proof: Google Ads conversion actions table showing whether the GA4 import has become a conversion action, plus source, primary / secondary, counting, and value source.
When purchase, value, currency, or transaction_id is untrusted, Ads report gaps get misread as media problems.
Proof: DebugView, test order, next-day report, Shopify order ID, and value sample reconcile.
Consent state changes usable Ads signals, observable GA4 purchases, and remarketing audience size.
Proof: 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.
Reports are not instantly complete
Boundary: 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.
Action: 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
Boundary: A GA4 key event becomes a Google Ads conversion action only after import, and bidding impact still depends on primary / secondary status.
Action: List conversion action source, goal, counting, value, and primary / secondary status before importing or disabling anything.
Lost GCLID dirties the reporting definition
Boundary: Auto-tagging adds GCLID to ad-click URLs; redirects, parameter cleanup, third-party hops, or manual UTMs can dirty the Ads-to-GA4 link.
Action: 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
Boundary: 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.
Action: 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.
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.
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 -> purchase` breaks.
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.
Google Ads conversions are high, GA4 purchases are low
- 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.
After selecting a route, write the symptom, safe action, and next team into the copyable lesson notes below. The point is to make the next review know what was actually decided.
20oz tumbler gap reconciliation flow
Suppose Google Ads shows 52 orders, 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.
1. Define the comparison window
QuestionAre both dashboards using the same date, timezone, account, campaign, and order status?
EvidenceGoogle Ads date range, GA4 date range, Shopify order export, and refund window.
DecisionIf windows differ, redo the comparison before any budget decision.
2. Check conversion source
QuestionDoes the Ads number come from GA4 import, Google Ads tag, enhanced conversions, or offline import?
EvidenceConversion actions table, primary / secondary status, counting setting, and value source.
DecisionIf duplicate primary signals exist, fix bidding signals before interpreting performance.
3. Split post-click quality
QuestionAfter the click, is the issue landing page, device, market, cart, or checkout?
EvidenceGA4 landing page, device, country, view_item, add_to_cart, begin_checkout, and purchase.
DecisionIf onsite behavior is weak, do not change bidding first; route to page, funnel, or checkout diagnosis.
4. Return to orders and profit
QuestionDo Shopify orders, refunds, discounts, shipping, payment fees, and margin support the Ads conclusion?
EvidenceShopify order sample, refund report, finance sheet, and 20-order profit sample.
DecisionIf profit does not support it, strong ROAS is not enough to scale.
Launch acceptance: transfer the ads signal board
After this lesson, do not hand off one report image. Hand off a field record that helps ads, page, data, and finance teams act together.
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.
Copyable lesson notes: GA4 x Google Ads reports Current pressure: do not first decide whether GA4 or Ads is wrong. Define which system owns bidding, site diagnosis, real orders, and profit. First evidence: Google Ads conversions are high, GA4 purchases are low -> Write the gap explanation before changing budgets or deleting conversions. Reconciliation case: 20oz tumbler: Ads 52, GA4 39, Shopify 44, profit 16 Four-table read: Google Ads shows 52 weekly conversions from Search and Shopping. Read conversion action source, counting, and attribution window first. / GA4 shows 39 purchases, with a sharper mobile `begin_checkout -> purchase` drop. The total purchase count is not enough. / Shopify has 44 net orders after cancellations, between Ads and GA4, but discounts, refunds, and order time need sampling. / 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. Field-level reconciliation notes: Conversion-count gap notes Ads fields: Conversion action, source, primary / secondary, counting method, attribution window, conversion time, and conversion value. GA4 fields: Key event, purchase count, transaction_id, source / medium, campaign, event_date, device, and country. Shopify fields: Order ID, created_at, financial status, cancelled / refunded status, net orders, discount code, and source order note. Finance fields: 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. Order timeline: Classroom order A: purchase on day 6, then partial refund; 6 days from click to purchase; 30 day classroom window. Classroom profit ROAS worksheet: Ads ROAS 4; Shopify sales ROAS 3.67; Contribution-after-ads return 0.48. Ads order gap: Ads says order, GA4 turns it into direct / none 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. Naming / click ID checks: Manual UTMs override auto-tagging Pollution symptom: Google Ads campaign rows look normal, but GA4 splits the same traffic into google / cpc, paid search, cpc_paid, manual campaign rows, and other variants. Repair move: Keep auto-tagging and remove manual UTMs that override the definition. If creative detail is needed, use utm_content or custom parameters instead of rewriting source / medium. Pollution blocked move: Do not use polluted source / campaign rows to decide whether Google Ads should scale or cut spend. Tool write-back path: Ads ROAS profit check: bring platform ROAS into the ROAS tool Data to bring into the tool: Google Ads cost, conv. value, campaign / ad group / product group, GA4 purchase revenue, Shopify net sales, refund reserve, variable cost rate, target ROAS, and the same date window. Tool output: Revenue ROAS, profit ROAS, break-even ROAS, Max CPA, and the gap between Ads conv. value and Shopify net sales. Budget 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. Checked evidence: None yet. Start with account link, auto-tagging, and conversion source. This week: verify conversion source, primary / secondary status, GCLID preservation, landing page / device / country / event chain, then reconcile Shopify and finance. Blocked move: if purchase, value, currency, transaction_id, or contribution profit is not accepted, do not feed the signal into bidding or scale spend. Blocked conclusion: if the 48-hour synchronization window is still open, Consent boundary is unclear, click ID is missing, offline import is pending, or the refund window is not closed, do not scale, pause, or rename campaigns this week. Evidence missing: name which layer is missing: Google Ads, GA4, Shopify Orders, or finance, plus the person who will fill it. Next re-read date: write the 48-hour or 7-day reread date before the next budget decision. Review window: reread in 7 days with the same date, timezone, campaign scope, order state, and profit sheet.
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, go to the next UTM lesson. If purchase value is far from backend value, return to event QA or revenue/refund analysis.
Continue with revenue, refund, and profit analysisOfficial source boundary map
| 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. |