GA4 helps locate purchase signals, but it cannot establish how much profit remains or whether cash can support another advertising increase. This lesson connects events, sales, costs, and settlement in a traceable record so Shopify operations, advertising, and finance teams can collect evidence, fix a weak layer, or continue carefully.
13 parts · 5 checkpoints · members get 1 record · 1 note more · 1 free / 12 member parts →
Key point Reconcile revenue, profit, and cash separately
The examples use synthetic tumbler orders and classroom amounts. Selections, calculations, saves, and exports stay in the exercise. They do not read stores, advertising accounts, or bank records, or change budgets.
Define the problem first
Recognize the different readings of the same money
Here, GA4 revenue means the value signal from the selected purchase events. A real report must name the exact revenue metric and whether refunds are already included. Shopify net sales is a sales definition, not a bank deposit. Subtract product cost from net sales for gross profit, then subtract only variable costs not already included for this lesson's contribution profit. Gross margin divides gross profit by net sales; it is a ratio rather than an amount.
ROAS divides the chosen revenue by advertising spend. Define its refund treatment and spend scope first. The ratio does not include every cost or establish that the orders would disappear without the advertising. Cash also depends on dates: inventory or media bills can arrive before a profitable order settles.
Choose the difference that needs explaining. Write the question before choosing a report or field.
What needs reconciliation first?
Join the same order with transaction_id, then inspect amount, currency, dates, refunds, and duplicate events. Explain the gap rather than choosing the higher number.
Start with net sales and identify discounts and sales reversals already reflected there. Add product cost, advertising, and other costs only once. Do not deduct the same discount or refund again.
Put payouts, advertising debits, inventory payments, and expected refunds on a timeline. Contribution minus a classroom cash hold is a risk prompt, not a bank balance or full cash-flow forecast.
The default is purchase reconciliation. When order joins, refund maturity, cost versions, or cash timing remain unknown, record the gap and owner. Later sample sizes and review periods are teaching choices, not evidence of incrementality, financial close, or budget authority.
Leave with evidence explaining the difference, a defined basis for every amount, and one limited action with an owner, review time, and stop condition.
Free account to read · Parts 2-13 · 12 parts
Complete order case, reconciliation workbook, and weekly decision
Reconcile events, sales, costs, and cash in order, retaining a local practice record.
This part includes
- Join orders, refunds, and payment evidence before checking costs and cash dates
- Preserve the old workbook while making deduction assumptions explicit
- Record a weekly action with ownership and a review time
1 checklist · 1 savable record · 1 copyable note · 1 calculator
An account is free; sign in to read this part.
Checking your membership…
Your work
- Member part: 1 record · 1 note · available after you unlock it
Kept in this browser only. Switching device or clearing browser data removes it; download a copy.
FAQ
- Is GA4 revenue the same as profit?
No. GA4 revenue is an event revenue-entry signal from purchase / refund / transaction_id, useful for source and path analysis. Profit still needs Shopify net sales gaps, refunds, payment fees, COGS, shipping subsidy, ad spend, and cash timing. GA4 can prove the revenue event and path, not profit safety.
- What should I check first when GA4 revenue and Shopify net sales differ?
Sample 20 orders with transaction_id / order ID first. Check duplicate purchase, currency, date window, discounts, returns, refunds, test orders, order edits, and source report. Do not scale from GA4 revenue until the gap is explained.
What to verify next
Save the action, owner, review date, and stop condition, then follow the route matching the current blocker.